python - 将向量 (1 x N) 乘以张量 (N x M x M)

标签 python arrays numpy pytorch matrix-multiplication

我正在 numpy 中或最好在 pytorch 中寻找一种矩阵运算,它允许将向量 (1 x N) 乘以张量 (N x M x M) 并得到 (1 x M x M)。使用 for 循环可以轻松完成此操作,但 for 循环不允许在训练期间进行反向传播。我尝试在 numpy 和 pytorch(以及其他几个,例如 dot 和 bmm)中使用 matmul,但无法正常工作。这是我想要做的一个示例(其中 M=2,但在我的用例中是 256):

a = np.array([1,2,3])
b = np.array([[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]])

我想执行以下操作:1*[[1,2],[3,4]] + 2*[[5,6],[7,8]] + 3*[[ 9,10],[11,12]],这可以通过这样的 for 循环来实现:

for i in range(3):
  matrix_sum += a[i]*b[i]

任何建议或解决方案将不胜感激。

最佳答案

您可以使用简单的 einsum:

#this gives you 2-D array (M,M)
np.einsum('i,ijk->jk',a,b)

输出:

[[38 44]
 [50 56]]

或其他解决方案:

#this gives you 3-D array (1,M,M)
a[None,:]@b.swapaxes(0,1)

输出:

[[[38 44]
  [50 56]]]

关于python - 将向量 (1 x N) 乘以张量 (N x M x M),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63147507/

相关文章:

python - 直接作为 SQL 查询查询 Sqlalchemy-utils EncrytedType

python - 无法使用 sklearn 库中的 fit_transform 插补一维数组(分割测试)

python - 如何检查网络是否无标度?

python - Django最佳用户模型设计

python - python中对等图片进行分组

python - 当使用 genfromtxt 指定 dtype 时,二维数组变为一维 - 如何防止这种情况?

PHP 到 Javascript 数组(种类)

java - 多个 for 循环迭代器的最佳实践

python - 将 pandas 列的元素与另一个 pandas 数据框的列匹配

Python:将一个数据框中的一列与另一个数据框中的列相除,累积总和