“广播机制:通过扩展实现数组运算”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
numpy数组的广播机制
110讨论 | 贡献
numpy数组的广播机制
第26行: 第26行:
  
 
----
 
----
<br>import numpy as np
+
a=np.array([[ 1.,  2.,  1.],
<br>a = np.array([[1,2,1],[1,2,1]])
+
            [ 1., 2., 1.],
数组与常数的相加可以看把常数按照数组的形状进行复制然后再相加的过程
+
            [ 1., 2., 1.]])
<br>print(a+5)
+
b=np.array([[3.],  
<br>print(a+np.array([[5.,5.,5.],[5.,5.,5.]]))
+
            [2.],  
[[6 7 6]
+
            [1.]])
  [6 7 6]]
+
print(a+b)
[[6. 7. 6.]
+
[[ 4.  5.  4.]
  [6. 7. 6.]]
+
  [ 3. 4. 3.]
 
+
  [ 2. 3. 2.]]
<br>a = np.array([[1.,2.,1.],[1.,2.,1.],[1.,2.,1.]])
+
#当数组就只有一个元素的时候,那么其实和常数就没什么区别了
<br>b = np.array([[3.],[2.],[1.]])
+
a=np.array([[ 1., 2., 1.],
<br>print(a+b)   |
+
            [ 1., 2., 1.],
|-
+
            [ 1., 2., 1.]])
|[[4. 5. 4.]
+
b=np.array([[3.]])
  [3. 4. 3.]
+
print(a+b)
  [2. 3. 2.]]   |}
+
[[ 4. 5. 4.]
 +
  [ 4.  5. 4.]
 +
  [ 4. 5. 4.]]

2020年5月16日 (六) 12:43的版本

numpy数组的广播机制

  • 注意numpy里数组之间的运算和线性代数中的矩阵运算是不一样的
  • 同纬度和形状的数组之间就是同位置的元素两两匹配运算的结果


import numpy as np
a=np.array([[ 1., 2., 1.], [ 1., 2., 1.]])
b=np.array([[ 1., 2., 3.], [ 1., 2., 3.]])
print(a.shape,b.shape)
>>>(2, 3) (2, 3)
print(a+b)
>>>array([[ 2., 4., 4.],[ 2., 4., 4.]])
print(a*b)
>>>array([[ 1., 4., 3.],[ 1., 4., 3.]])
print(a-b)
>>>array([[ 0., 0., -2.],[ 0., 0., -2.]])
print(a**b)
>>>array([[ 1., 4., 1.],[ 1., 4., 1.]])


  • 当两个数组其中一个的维度少于另外一个的时候

少的数组在某一个轴(或是多个轴)的方向缺失数据,缺数据的那个方向只能有1个元素(或是一行,一面)作为复制蓝本,然后依照轴的方向复制,复制数由多的那个数组的大小决定

  • 注意:如果是列和行其中之一有空缺是可以通过复制来运算的。

但是蓝本不能有缺或者多,即行和列都不完整。


a=np.array([[ 1., 2., 1.],

           [ 1.,  2.,  1.],
           [ 1.,  2.,  1.]])

b=np.array([[3.],

           [2.], 
           [1.]])

print(a+b) [[ 4. 5. 4.]

[ 3.  4.  3.]
[ 2.  3.  2.]]
  1. 当数组就只有一个元素的时候,那么其实和常数就没什么区别了

a=np.array([[ 1., 2., 1.],

           [ 1.,  2.,  1.],
           [ 1.,  2.,  1.]])

b=np.array(3.) print(a+b) [[ 4. 5. 4.]

[ 4.  5.  4.]
[ 4.  5.  4.]]