【发布时间】:2021-02-20 16:02:50
【问题描述】:
如何在不使用循环结构的情况下执行以下代码,而不是使用 numpy einsum 函数?我希望产品矩阵是 2D 矩阵而不是 3D。简单地做 "D = np.einsum('ijk,ijk->jk',A,B) D += np.einsum('ijk,ijk->jk',B,C) " 给出不同的结果。我应该引入任何中间临时数组或其他东西来使用 einsum 函数吗?
import numpy as np
A = np.array( [[[1, 2, 3, 0],
[ 4, 2, 1, 1]],
[[2, 0, 0, 3],
[1, 0, 2, 4]]] )
B = np.array( [[[0, 2, 3, 1],
[0, 2, 5, 0]],
[[0, 1, 2, 2],
[3, 3, 2, 1]]] )
C = np.array( [[[0, 2, 2, 1],
[0, 2, 1, 0]],
[[0, 0, 2, 0],
[3, 1, 2, 1]]] )
X = np.zeros([2,4])
for i in range(2):
for j in range(2):
for k in range(4):
X[j,k] = A[i,j,k]*B[i,j,k]
X[j,k] += B[i,j,k]*C[i,j,k]
D = np.einsum('ijk,ijk->jk',A,B)
D += np.einsum('ijk,ijk->jk',B,C)
【问题讨论】:
-
什么是
C?它不存在于问题中 -
对不起,大卫,我忘了添加 C 数组。谢谢你通知我。我现在已经更新了代码。你能帮帮我吗?
-
你的
i循环没有用,因为你丢弃了所有的i=0值。 -
看起来你正在尝试计算
X = (A*B + B*C).sum(axis = 0)。 -
实际上需要 i 循环来指定 A、B 和 C 矩阵的索引
标签: python numpy numpy-einsum