

Python  
numpyかpytorchで複数の行列の掛け算をforループを用いずに同時に行いたいです。

例えば10×100の異なる行列が5個と100×100の行列が一つあるとします。

[code]

    import numpy as np
    a = np.random.rand(5,10,100)
    b = np.random.rand(100,100)
    
[/code]

aが10×100の異なる5個の行列でbが100×100の行列です。

[code]

    c= np.zeros((5,10,100))
    for i in range(len(a)):
        c[i] = np.dot(a[i],b)
    
[/code]

もしくはpytorchで

[code]

    import torch
    c = torch.zeros((5,10,100))
    a = torch.randn(5,10,100)
    b = torch.randn(100,100)
    for i in range(len(a)):
        c[i] = torch.mm(a[i],b)
    
[/code]

何か案があれば教えていただけると幸いです。

このようにfor文でなら実現できますがaの個数が5から増えると遅くなってしまいます。  
行列bは同じものなので並行して行列の掛け算を行いたいです。


CC BY-SA 4.0
2018-10-08T07:55:24.930
49054
2021-03-30T09:02:35.270
30088
question
python 画像 numpy pytorch
複数の行列の掛け算を同時に行う


実際につかう行列は40000×40000くらいで計算時間が問題になるかと思っていたのですが、GPUを使って計算したところ0.01秒ほどで実行できました。

* * *

この投稿は @potiki
さんの[コメント](https://ja.stackoverflow.com/questions/49054/#comment50997_49054)などを元に編集し、[コミュニティWiki](https://ja.meta.stackoverflow.com/q/1583)として投稿しました。


CC BY-SA 4.0
2021-02-02T12:18:57.163
73766
2021-02-02T12:18:57.163
9820
49054
answer