您的位置:首页 > 编程语言 > Python开发

numpy 数组的广播机制

2019-05-09 10:09 183 查看
  1. 让所有的输入数组首先向其中位数最多的数组看起,shape属性中的不足部分通过在前面 加补齐
  2. 输出数组的shape属性是输入数组的shape属性在各个轴的最大值
  3. 如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的
  4. 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
  5. 如果两个数组的输入维数相同,后缘维度相同,但是前面的元素个数不同,无法运算,比如a.shape=[2,2] b.shape = [3,2],则无法进行广播
    例子:
import numpy as np;

a = np.arange(6)
a = np.reshape(a,[3,1,2])

b = np.array([[1,2],[2,3]])

print a+b
'''[[[1 3]
[2 4]]

[[3 5]
[4 6]]

[[5 7]
[6 8]]]
'''

在这个过程中a.shape = (3,1,2),b.shape = (2,2)所以按照规则1,先将b补齐,b.shape=(1,2,2),再根据规则4,b变成b.shape = (3,2,2),a变成a.shape=(3,2,2),再进行运算

注意 两个后缘维度为1的数组相加会降维:

>>> a = np.array([[1,2],[2,3],[3,4]])
>>> a[:,0]+a[:,1]
#array([3, 5, 7])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: