如何在类似于点积的numpy中获得"dot addition"?
How to get "dot addition" in numpy similar to dot product?
我对 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
.
之间的任何类型的操作
我对 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
.