31

两个数组:

a = numpy.array([[2,3,2],[5,6,1]])
b = numpy.array([3,5])
c = a * b

我想要的是:

c = [[6,9,6],
     [25,30,5]]

但是,我收到了这个错误:

ValueError: operands could not be broadcast together with shapes (2,3) (2)

如何将nD 数组与 1D 数组相乘len(1D-array) == len(nD array),在哪里?

4

2 回答 2

40

您需要将数组 b 转换为 (2, 1) 形状数组,使用 None 或numpy.newaxis在索引元组中:

import numpy
a = numpy.array([[2,3,2],[5,6,1]])
b = numpy.array([3,5])
c = a * b[:, None]

这是文件

于 2013-04-26T06:12:09.367 回答
3

另一种策略是重塑第二个数组,使其具有与第一个数组相同的维数:

c = a * b.reshape((b.size, 1))
print(c)
# [[ 6  9  6]
#  [25 30  5]]

或者,可以就地修改第二个数组的shape属性:

b.shape = (b.size, 1)
print(a.shape)  # (2, 3)
print(b.shape)  # (2, 1)
print(a * b)
# [[ 6  9  6]
#  [25 30  5]]
于 2016-12-15T21:07:41.793 回答