有两个这样的数组
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]
但实际上我的x
和y
的长度非常大,所以在没有循环的情况下进行这种乘法的最有效方法是什么。
答案 0 :(得分:4)
您可以使用NumPy broadcasting
在x
和y
之间进行成对元素乘法,然后用.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])
>>>