如何获得类似于点积的numpy中的“点加法”?

问题描述

我对numpy有点陌生,正在为这个问题而苦苦挣扎。我有两个二维的numpy数组:

array1 = [a1,a2,...,an]
array2 = [b1,b2,am]

a1a2b1b2都是一维数组,其中恰好有100个浮点数。但是,array1array2具有不同的长度。因此array1array2分别具有形状(n,100)(m,100),其中nm是任意长度。

我想在它们之间执行某种修改的点积,以便输出以下矩阵:

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,:,:]。您可以轻松地将此扩展到mn之间的任何类型的操作。