私は次の方程式を実装するために働いています:
X =(Y.T * Y + Y.T * C * Y) ^ -1
Yは(nxf)行列で、Cは(nxn)対角行列です。nは約300kで、fは100から200の間で変化します。最適化プロセスの一部として、この方程式はほぼ1億回使用されるため、非常に高速に処理する必要があります。
Yはランダムに初期化され、Cは非常にスパースな行列であり、対角線上の300kのうち数個だけが0とは異なります。Numpyの対角関数は密な行列を作成するため、Cをスパースなcsr行列として作成しました。しかし、方程式の最初の部分を解こうとすると、次のようになります。
r = dot(C, Y)
メモリ制限が原因でコンピュータがクラッシュします。次に、Yをcsr_matrixに変換して、同じ操作を行うことにしました。
r = dot(C, Ysparse)
このアプローチには1.38ミリ秒かかりました。しかし、スパース行列を使用して密な行列を格納しているため、このソリューションはやや「トリッキー」です。これが実際にどれほど効率的か疑問に思います。
だから私の質問は、Yをスパースに変えてパフォーマンスを向上させることなく、スパースCとデンスYを乗算する方法があるかどうかです。どういうわけか、大量のメモリを消費せずにCを対角線密度で表すことができれば、これは非常に効率的なパフォーマンスにつながる可能性がありますが、これが可能かどうかはわかりません。
私はあなたの助けに感謝します!