我有那些数组:
a = np.array([
[1,2],
[3,4],
[5,6],
[7,8]])
b = np.array([1,2,3,4])
我想让它们像这样繁殖:
[[1*1, 2*1],
[3*2, 4*2],
[5*3, 6*3],
[7*4, 8*4]]
...基本上out[i] = a[i] * b[i]
,其中a[i].shape
为(2,)
,b[i]
则为标量。
诀窍是什么? np.multiply
似乎不起作用:
>>> np.multiply(a, b)
ValueError: operands could not be broadcast together with shapes (4,2) (4)
答案 0 :(得分:27)
将轴添加到b:
>>> np.multiply(a, b[:, np.newaxis])
array([[ 1, 2],
[ 6, 8],
[15, 18],
[28, 32]])
答案 1 :(得分:7)
>>> a * b.reshape(-1, 1)
array([[ 1, 2],
[ 6, 8],
[15, 18],
[28, 32]])
答案 2 :(得分:3)
答案 3 :(得分:1)
答案 4 :(得分:0)
我认为它看起来不错,但很幼稚,因为如果更改a或b的尺寸,则解决方案
np.mulitply(a, b[:, None])
不再工作。
我一直对将任意大小的行上升(甚至更一般地说是第n维)相乘的数组存有相同的疑问。
我曾经做过类似的事情
z = np.array([np.multiply(a, b) for a, b in zip(x,y)])
,适用于尺寸为1或2的x或y。
与其他numpy方法一样,它是否具有带有“ axis”参数的方法?像
z = np.mulitply(x, y, axis=0)