最近在入门深度学习,所以在学习一下Python,记录一下Python学习过程中的一些迷惑 Python中使用NumPy数组算数运算时,如数组x和数组y,x + y代表对数组中的对应位置的各个元素进行算数运算,如果元素个数或者数组维度不相同,程序就会报错,因此要元素个数和数组维度保持一致是非常重要的.
import numpy as np
x = np.array([1, 2, 3])
y = np.array([1, 2, 3])
print(x + y) #element-wise运算,运算结果为[2, 4, 6]
print(x * y) #element-wise运算,运算结果为[1, 4, 9]
对于不同维度的NumPy要进行算数运算时,可以基于NumPy的广播功能进行算数运算,例如:
import numpy as np
x = np.array([1, 2, 3])
y = np.array([1])
print(x + y) # 实际执行操作为np.array([1, 2, 3]) + np.array([1, 1, 1]),结果为[2, 3, 4]
由此我们可以看出,基于广播的规则,与数组x进行算数运算时,数组y被扩展为[1, 1, 1].
可以通过广播进行算数计算的两种情况:
两个数组各维度大小从后往前比对均一致
例如N维数组A和M维数组B进行算数运算时:
A = (2, 3, 3, 4) B = (3, 4) #可以进行运算,输出运算结果的维度为(2, 3, 3, 4)
A = (2, 3, 4, 5) B = (4, 5) #不可以进行运算
两个数组存在一些维度大小不相等时,有一个数组的该不相等维度大小为1
这是对上面那条规则的补充,虽然存在多个维大小不一致,但是只要不相等的那些维有一个数组的该大小是1就可以。 例如N维数组A和M维数组B进行算数运算时:
A = (2,5,3,4) B = (1,4) #可以进行运算,虽然两个数组第三维不相同,但是B数组第三维为1。输出运算结果的维度为(2, 5, 3, 4)
A = (2, 3, 4, 5) B = (2, 2, 1, 5) #不可以进行运算,两个数组第二维不相同,且都不等于1.
基于以上两个规则运算之后,得到的结果的维度就是两个数组中每个维度的最大值。
感谢司南牧的博客