矩阵乘法维度
Matrix multiplication dimensons
我有一个 (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 中实现它.
我也想使用纯矩阵乘法而不使用循环
您可以使用广播:
ret = (M @ v[...,None]).reshape(v.shape)
### check
loop = np.array([M[i] @ v[i] for i in range(n)])
(ret==loop).all()
# True
为什么不完全按照您使用索引编写的方式进行呢?
w = np.einsum('kij,kj->ki', M, v)
这相当于wki = Mkijvkj.
我有一个 (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 中实现它.
我也想使用纯矩阵乘法而不使用循环
您可以使用广播:
ret = (M @ v[...,None]).reshape(v.shape)
### check
loop = np.array([M[i] @ v[i] for i in range(n)])
(ret==loop).all()
# True
为什么不完全按照您使用索引编写的方式进行呢?
w = np.einsum('kij,kj->ki', M, v)
这相当于wki = Mkijvkj.