矩阵乘法二元组[重复]

问题描述 投票:1回答:1

我有一个(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中实现它。

我也希望使用纯矩阵乘法,不需要循环。

python numpy matrix-multiplication
1个回答
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

2
投票

为什么不按你写指数的方式来写呢?

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

这相当于 w = M栅栏vkj.

© www.soinside.com 2019 - 2024. All rights reserved.