我有一组向量(n(、另一组向量和一组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,但它需要一个1D数组来操作。理想情况下,我正在努力找出一个不需要任何for循环的解决方案。
我试着让np.tensordot()
工作(并在两次操作中完成(,但到目前为止没有成功。
有人想用一种更"愚蠢"的方式来做这件事吗?
np.einsum('imn,jnm,kmn->ijk', n, s, T)