私は次のようなnumpy配列を持っています:
array = [0.2, 0.3, 0.4]
(このベクトルは実際にはサイズが300kの密度であり、簡単な例で説明しています)
次のようなScipyを使用して作成されたスパース対称行列:
M = [[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
(説明のために高密度として表されています。私の実際の問題では、(300k x 300k)スパース行列です)
すべての行に配列内の要素を掛けてから、列に関して同じ操作を行うことは可能ですか?
これにより、最初に次の結果になります。
M = [[0 * 0.2, 1 * 0.2, 2 * 0.2]
[1 * 0.3, 0 * 0.3, 1 * 0.3]
[2 * 0.4, 1 * 0.4, 0 * 0.4]]
(行は配列内の要素で乗算されています)
M = [[0, 0.2, 0.4]
[0.3, 0, 0.3]
[0.8, 0.4, 0]]
そして、列が乗算されます。
M = [[0 * 0.2, 0.2 * 0.3, 0.4 * 0.4]
[0.3 * 0.2, 0 * 0.3, 0.3 * 0.4]
[0.8 * 0.2, 0.4 * 0.3, 0 * 0.4]]
最終的に:
M = [[0, 0.06, 0.16]
[0.06, 0, 0.12]
[0.16, 0.12, 0]]
このスレッドで見つけた解決策を適用しようとしましたが、うまくいきませんでした。提案されたようにMのデータに配列内の要素を掛けてから、マトリックスを転置して同じ操作を適用しましたが、結果は正しくありませんでした。それでも理由がわかりません。
これを指摘するために、この操作を実行するマトリックスはやや大きく、ゼロ以外の要素が2,000万個あるため、効率が非常に重要です。
私はあなたの助けに感謝します!
編集:
ビット単位のソリューションは非常にうまく機能しました。ここでは、この操作の計算に1.72秒かかりましたが、これで問題ありません。Tnx!