Numpy乘以不同的形状

时间:2016-08-18 19:32:53

标签: python numpy

有两个这样的数组

x = [a,b]
y = [p,q,r]

我需要将它们乘以产品c,这应该是这样的,

c = [a*p, a*q, a*r, b*p, b*q, b*r]

但是x*y会出现以下错误,

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

我可以做这样的事情,

for i in range(len(x)):
    for t in range(len(y)):
        c.append(x[i] * y[t]

但实际上我的xy的长度非常大,所以在没有循环的情况下进行这种乘法的最有效方法是什么。

2 个答案:

答案 0 :(得分:4)

您可以使用NumPy broadcastingxy之间进行成对元素乘法,然后用.ravel()展平,就像这样 -

(x[:,None]*y).ravel()

或使用outer product然后展平 -

np.outer(x,y).ravel()

答案 1 :(得分:0)

使用Numpy dot ...

>>> import numpy as np
>>> a=np.arange(1,3)# [1,2]
>>> b=np.arange(1,4)# [1,2,3]
>>> np.dot(a[:,None],b[None])
array([[1, 2, 3],
       [2, 4, 6]])
>>> np.dot(a[:,None],b[None]).ravel()
array([1, 2, 3, 2, 4, 6])
>>>