重复numpy向量-矩阵-向量乘法

时间:2018-11-17 02:20:28

标签: numpy

我有一组向量(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()工作(并通过两次操作完成),但到目前为止没有成功。

有人对实现这种“麻木式”的方式有想法吗?

1 个答案:

答案 0 :(得分:2)

np.einsum('imn,jnm,kmn->ijk', n, s, T)