python - numpy - 沿轴的点积之和

标签 python numpy scipy matrix-multiplication dot-product

我有一个 A x B 数组和另一个 D x A x A 数组,并且正在尝试想出有效的方法来计算沿 D 轴的两个数组的点积之和(这样结果将是 A x B 数组)。最明显的方法是使用 for 循环:

result = np.zeros(first_array.shape)
for d in range(0,second_array.shape[0]):
    result = result + np.dot(second_array[d], first_array)
print result

我想知道在 numpy 中是否有更有效的计算方法。我读过一点np.einsum但不幸的是,我不完全了解它在这种情况下是否能够提供帮助。

最佳答案

In [436]: np.einsum('ijk,km->jm',np.ones((2,3,3)),np.ones((3,4)))
Out[436]: 
array([[ 6.,  6.,  6.,  6.],
       [ 6.,  6.,  6.,  6.],
       [ 6.,  6.,  6.,  6.]])
In [437]: _.shape
Out[437]: (3, 4)

您的表示为(k在第一个的最后一个和第二个的第二个到最后一个之间共享):

In [438]: np.einsum('jk,km->jm',np.ones((3,3)),np.ones((3,4)))
Out[438]: 
array([[ 3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.]])

i 添加到第一个数组与其 3d 形状相匹配。但是从结果中省略它会告诉einsum对其值求和。没有求和

In [439]: np.einsum('ijk,km->ijm',np.ones((2,3,3)),np.ones((3,4))).shape
Out[439]: (2, 3, 4)

关于python - numpy - 沿轴的点积之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42319805/

相关文章:

python - 是否可以在网络浏览器中运行 python 代码?

python - numpy.ndarray 的可迭代行为从何而来?

python - 计算算术运算

python - 为什么 Scipy 的 PERCENTRANK.INC 返回的结果与 Excel 的 PERCENTRANK.INC 不同?

python - 如何匹配和合并两个除单个单词外具有完全不同值的数据帧? ABC 有 10 行,XYZ 有 22550 行

python - 如何在 rhythmbox 插件中列出所有艺术家

python - 如何使用tix.DirSelectDialog?

python - 如何使用 ctypes 将数组从 Go [lang] 返回到 Python?

python - Python中的快速整数矩阵零空间?

python - 使用曲线拟合降低数据维度