[英]python - numpy - many matrices multiplying many vectors
我有一組許多矩陣,每個矩陣對應一個向量。 我想將每個矩陣乘以它的向量。 我知道我可以將所有矩陣以大塊對角線的形式放入,然后乘以一個大的組合向量。
我想知道是否有一種方法可以使用numpy.dot
以高效的方式將它們全部相乘。
我試圖使用numpy.stack
和numpy.dot
,但是我不能只獲得想要的向量。
更加具體。 我的矩陣如下所示:
R_stack = np.stack((R, R2, R3))
這是
array([[[-0.60653066, 1.64872127],
[ 0.60653066, -1.64872127]],
[[-0.36787944, 2.71828183],
[ 0.36787944, -2.71828183]],
[[-0.22313016, 4.48168907],
[ 0.22313016, -4.48168907]]])
和我的載體看起來像:
p_stack = np.stack((p0, p0_2, p0_3))
這是
array([[[0.73105858],
[0.26894142]],
[[0.88079708],
[0.11920292]],
[[0.95257413],
[0.04742587]]])
我想乘以以下內容: R*p0, R2*p0_2, R3*p0_3
。
當我做dot
:
np.dot(R_stack, p_stack)[:,:,:,0]
我懂了
array([[[ 0. , -0.33769804, -0.49957337],
[ 0. , 0.33769804, 0.49957337]],
[[ 0.46211716, 0. , -0.22151555],
[-0.46211716, 0. , 0.22151555]],
[[ 1.04219061, 0.33769804, 0. ],
[-1.04219061, -0.33769804, 0. ]]])
3個載體,我感興趣的是3 [0,0]
在對角線上的載體。 我怎樣才能得到它們?
你快到了。 您需要在第1和第3維上添加對角線索引,如下所示:
np.dot(R_stack, p_stack)[np.arange(3),:,np.arange(3),0]
結果中的每一行將對應於您想要的向量之一:
array([[-3.48805945e-09, 3.48805945e-09],
[-5.02509157e-09, 5.02509157e-09],
[-1.48245199e-08, 1.48245199e-08]])
我發現的另一種方法是使用numpy.diagonal
np.diagonal(np.dot(R_stack, p_stack)[:,:,:,0], axis1=0, axis2=2)
在每一列中給出一個向量:
array([[0., 0., 0.],
[0., 0., 0.]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.