【问题标题】:In numpy, what is the fastest way to multiply the second dimension of a 3 dimensional array by a 1 dimensional array?在 numpy 中,将 3 维数组的第二维乘以 1 维数组的最快方法是什么?
【发布时间】:2011-08-17 16:36:40
【问题描述】:

你有一个形状为 (a,b,c) 的数组,你想将第二维乘以一个形状为 (b) 的数组

for 循环可以,但有更好的方法吗?

例如。

A = np.array(shape=(a,b,c))
B = np.array(shape=(b))

for i in B.shape[0]:
    A[:,i,:]=A[:,i,:]*B[i]

【问题讨论】:

  • 第二个维度是什么意思?您是指a=0 处的(b,c) 维度吗?

标签: python arrays multidimensional-array numpy


【解决方案1】:

使用broadcasting:

A*B[:,np.newaxis]

例如:

In [47]: A=np.arange(24).reshape(2,3,4)

In [48]: B=np.arange(3)

In [49]: A*B[:,np.newaxis]
Out[49]: 
array([[[ 0,  0,  0,  0],
        [ 4,  5,  6,  7],
        [16, 18, 20, 22]],

       [[ 0,  0,  0,  0],
        [16, 17, 18, 19],
        [40, 42, 44, 46]]])

B[:,np.newaxis] 的形状为 (3,1)。广播在左侧添加了新轴, 所以这被广播成形状(1,3,1)。广播还会沿长度为 1 的轴重复项目。因此,当乘以 A 时,它会进一步广播到形状 (2,3,4)。这与A 的形状相匹配。然后像往常一样逐元素进行乘法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2022-07-12
    • 2017-01-26
    • 1970-01-01
    • 2011-01-31
    • 2018-12-22
    • 1970-01-01
    相关资源
    最近更新 更多