簡體   English   中英

Python-numpy-許多矩陣乘以許多向量

[英]python - numpy - many matrices multiplying many vectors

我有一組許多矩陣,每個矩陣對應一個向量。 我想將每個矩陣乘以它的向量。 我知道我可以將所有矩陣以大塊對角線的形式放入,然后乘以一個大的組合向量。

我想知道是否有一種方法可以使用numpy.dot以高效的方式將它們全部相乘。

我試圖使用numpy.stacknumpy.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM