【问题标题】:Numpy: How can I add (4, ) array and (9, 9) array to (9, 9, 4) array?Numpy:如何将 (4, ) 数组和 (9, 9) 数组添加到 (9, 9, 4) 数组?
【发布时间】:2020-11-27 08:36:09
【问题描述】:
import numpy as np
a = np.array([0, 10, 11, 1])
 
# OUT:
# array([ 0, 10, 11,  1])
 
b = np.arange(81).reshape(9, 9)
# OUT:
# array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8],
#       [ 9, 10, 11, 12, 13, 14, 15, 16, 17],
#       [18, 19, 20, 21, 22, 23, 24, 25, 26],
#       [27, 28, 29, 30, 31, 32, 33, 34, 35],
#       [36, 37, 38, 39, 40, 41, 42, 43, 44],
#       [45, 46, 47, 48, 49, 50, 51, 52, 53],
#       [54, 55, 56, 57, 58, 59, 60, 61, 62],
#       [63, 64, 65, 66, 67, 68, 69, 70, 71],
#       [72, 73, 74, 75, 76, 77, 78, 79, 80]])

我希望 b-array 的每一项都添加到 a-array 中,并得到类似的结果,就像一个简单的循环可以做的那样:

result = list()

for row in b:
    ls = list()
    
    for i in row:
        c = a + i
        ls.append(c)

    result.append(ls)
np.array(result)

Loop 效率不够,有什么办法可以使用 Numpy 广播规则来得到这个结果?(Numpy 数组)

【问题讨论】:

  • np.add.outer(b,a) 为您提供数组。

标签: python arrays pandas numpy matrix


【解决方案1】:

执行此操作的“一般”方法是使用None 进行索引。如果您使用None 索引一个数组,它会创建一个新轴并沿该轴广播该数组。

所以如果你有a.shape = (4,)b.shape = (9,9),你可以这样添加:

a[:,None,None] + b[None,:,:]

a 索引中的 :a 的唯一轴,其大小为 4。其余两个轴 None,None 是广播以匹配 b 的新轴。

b 索引中的:,: 索引是数组中的轴,形状为(9,9)None 是一个新轴,广播以匹配 a

可能有更短的方法来写这个,但我懒得记住隐式广播的规则是如何工作的,所以我只是把它说清楚。

如果更清楚,您也可以使用numpy.newaxis,但效果相同。

【讨论】:

  • 您也可以使用np.newaxis 代替None 更明确。但是np.newaxis 只是映射到None
猜你喜欢
  • 2017-11-11
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多