我有一组向量(n),另一组向量(s)和一组3x3 2D数组(T)。
n = np.array([
[[1, 2, 3]],
[[2, 2, 3]],
[[3, 2, 3]],
[[4, 2, 3]],
[[5, 2, 3]],
[[6, 2, 3]]
])
s = np.array([
[[1, 1, 5]],
[[2, 2, 5]],
[[3, 3, 5]],
[[4, 4, 5]],
[[5, 5, 5]],
[[6, 6, 5]]
])
T = np.array([
[[1, 2, 3],
[1, 2, 3],
[2, 2, 3]],
[[2, 2, 3],
[3, 2, 3],
[4, 2, 3]],
[[3, 2, 3],
[5, 2, 3],
[6, 2, 3]],
[[4, 2, 3],
[7, 2, 3],
[8, 2, 3]]
])
现在,我当前的代码依次遍历n,s和T:
result = np.array(n.shape[0], s.shape[0], T.shape[0])
for i in range(n.shape[0]):
for j in range(s.shape[0]):
for k in range(T.shape[0]):
result[i][j][k] = np.sum(n[i] * T[k] * s[j].T)
我尝试使用np.apply_along_axis,但它需要一维数组才能进行操作。理想情况下,我正在尝试制定一种不需要任何for循环的解决方案。
我试图让np.tensordot()
工作(并通过两次操作完成),但到目前为止没有成功。
有人对实现这种“麻木式”的方式有想法吗?
答案 0 :(得分:2)
np.einsum('imn,jnm,kmn->ijk', n, s, T)