如何在类似于点积的numpy中获得"dot addition"?

How to get "dot addition" in numpy similar to dot product?

我对 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.

之间的任何类型的操作