2

問題: numpy で、M1別の matrix で乗算しているマトリックスがありM2ます。

M1結果の行列が対称になり、上位の値のみが必要になるため、値の半分を節約できることがわかっていkます。

だから私は半分の値をゼロにするために使用することを考えています.float操作全体を行うのではなく、見てすぐに停止できるように、基礎となるC関数がnumpy.tril乗算に対して高速になることを期待しています.a*ba==0a==0

私はこれを計ることができることを知っていますが、これは一般的な関心の問題だと思います.

M1はまばらではなく、その半分を考慮する必要がないことに注意してください。

おそらく、50% の計算を節約するためのさらに良い方法があるでしょうか?

背景:これは

p(A|B)*p(B) == p(B|A)*p(A)

...私の言いたいことがわかるなら。

例:これは発生する 1 つのポイントにすぎませんが、最終的には、

  • |A| x |A| 行列p(A|B)(A と B は同じ変数)
  • 1×|A| マトリックスp(B)
  • 結果は |A| です。x |A| p(A,B) = p(A|B)*p(B)対角線はそれ自体が与えられた値の確率であり、対角線の上または下の部分は残りの半分の複製であるため気にしない行列。健全性チェックには適していますが、結局のところ不要です。

ここでは、実際には内積ではないことに注意してください。しかし、p(A|B) につながる計算の半分も不要だと思います。

更新: このアプリケーションでは、A と B が互いに素になるように制限するという、より合理的なアプローチを追求します。次に、すべての行列のサイズが縮小されます。これは numpy でエレガントに実行できますが、コードの読み取りがいくらか複雑になります。

結局、それは意味がありませんでした。唯一のオプションはM1.shape[0]-1、三角形を再作成する部分行列を作成することですが、それでは確かにオーバーヘッドが大きくなりすぎます。

4

0 に答える 0