矩阵乘法维数

时间:2020-05-21 15:34:33

标签: python numpy matrix-multiplication

我有(n x 3)个向量:

v = [v1,   [[x,y,z],
    v2,   = [x,y,z],
    vn].    [x,y,z]]

还有一个(n x 3 x 3)矩阵:

M = [M1,
     M2,
     Mn]

结果应为:

w = [M1 x v1,
     M2 x v2,
     Mn x vn]

因此,总而言之,我想将形状(n x 3)的向量v与形状(n x 3 x 3)的矩阵相乘,以获得向量(n x 3)。

我无法把握这些维数,因此矩阵乘法将按我的要求进行计算。 帮助将不胜感激。

PS:我正在将Python与numpy一起使用,但是尽管我也很欣赏完成的numpy实现,但我想当我知道如何操纵尺寸时,就可以自己在nupy中实现它。

我也想使用纯矩阵乘法并且没有循环

2 个答案:

答案 0 :(得分:2)

您可以使用广播:

ret = (M @ v[...,None]).reshape(v.shape)

### check
loop = np.array([M[i] @ v[i] for i in range(n)])
(ret==loop).all()
# True

答案 1 :(得分:2)

为什么不完全按照索引编写的方式来做呢?

w = np.einsum('kij,kj->ki', M, v)

这等效于 w ki = M kij v kj