问题描述
我对numpy有点陌生,正在为这个问题而苦苦挣扎。我有两个二维的numpy数组:
array1 = [a1,a2,...,an]
array2 = [b1,b2,am]
a1
,a2
,b1
和b2
都是一维数组,其中恰好有100个浮点数。但是,array1
和array2
具有不同的长度。因此array1
和array2
分别具有形状(n,100)
和(m,100)
,其中n
和m
是任意长度。
array([[ a1+b1,a1+b2,a1+b3,...],[ a2+b1,a2+b2,a2+b3,[ a3+b1,a3+b2,a3+b3,[...]])
我知道np.dot(array1,array2.T)
让我很亲近。它只是给我a1•b1
而不是所需输出数组中的a1+b1
。
使用numpy获得所需数组的最有效计算方式是什么?预先感谢!
解决方法
为此目的使用np.outer
ufunc:
np.add.outer(array1,array2)
示例:
array1 = np.array([1,2,3])
array2 = np.array([1,2])
输出:
[[2 3]
[3 4]
[4 5]]
,
与上述解决方案略有不同,并且可推广性更高。
如果您使第一个数组看起来像(m,1,100),而第二个数组看起来像(1,n,100),然后将这两个数组加在一起,则可以通过numpy的广播获得想要的东西规则。
但这很容易:m[:,None,:] + n[None,:,:]
。您可以轻松地将此扩展到m
和n
之间的任何类型的操作。