先创建一个数组
import numpy as np
array = np.arange(1, 5)
print(array) # [1 2 3 4]
现在,我想让数组里的每一个数都变为原来的两倍,如果是用列表,难免要写一个列表推导式了,但是用numpy就不需要,只需要整个数组乘以2就可以
import numpy as np
array = np.arange(1, 5)
array = array*2
print(array) # [2 4 6 8]
2 被填充为[2 2 2 2], 同array具有了相同的维度,对应元素之间相乘就是最终结果。
import numpy as np
array_1 = np.arange(1, 5)
array_2 = np.arange(2, 6)
print(array_1, array_2) # [1 2 3 4] [2 3 4 5]
array_3 = array_1 + array_2
print(array_3) # [3 5 7 9]
array_1和array_2拥有相同的维度,两者之间做加法,广播成为相同索引位置上的元素之间的加法。在这个例子里,两个数组的形状是相同的,当两个数组的形状不相同时,同样可以广播。
维度不同的两个数组之间也可以进行广播,但要满足特定条件,下面的两个条件,只要满足其一即可
两个数组的维度,从后向前比较大小一致
举例说明
import numpy as np
a = np.zeros((2, 5, 3, 4)) # 最后两个维度带下是 3 和 4
b = np.zeros((3, 4)) # 最后两个维度带下是 3 和 4
print((a*b).shape) # (2, 5, 3, 4)
a = np.zeros((4)) # 最后一个维度大小是4
b = np.zeros((3, 4)) # 最后一个维度大小是4
print((a*b).shape) # (3, 4)
虽然维度不同,但是从后向前比较他们维度的带下,却是一致的,
依然从后向前比较,对应维度的大小不一致时,有一个维的大小是1就可以
举例说明
import numpy as np
a = np.zeros((2, 1, 3, 4))
b = np.zeros((2, 1, 4))
print((a*b).shape)
从后向前比较,两个数组的维的大小分别是
1 3 4
2 1 4
最后一个维度的大小都是4,倒数第二个维度大小不相同,但是其中一个是1,这就符合要求了,倒数第三个维度大小也不相同,但是其中一个数组的维度大小是1,也满足要求,这样两个数组就可以进行广播了。
再举一个错误的例子
a = np.zeros((2, 1))
b = np.zeros((3, 4))
print((a*b).shape)
最后一个维度的大小,两个数组一个是1,一个是4,虽然不相同,但是有一个是1,满足条件2的要求,但倒数第二个维度的大小,一个是2,一个是3,没有一个是1,因此不符合广播的要求,程序会报错。
QQ交流群: 211426309