“广播机制:通过扩展实现数组运算”的版本间的差异
来自CloudWiki
(→numpy数组的广播机制) |
(→numpy数组的广播机制) |
||
第26行: | 第26行: | ||
---- | ---- | ||
− | + | 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.]] | |
− | + | #当数组就只有一个元素的时候,那么其实和常数就没什么区别了 | |
− | + | 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.]] |
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.]]
- 当数组就只有一个元素的时候,那么其实和常数就没什么区别了
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.]]