Matlab では、まだ多くの計算を行う必要があり、配列の約 25% が非ゼロである場合、スパース配列が通常の配列よりも優れているのはどの時点ですか?
5028 次
2 に答える
22
個人的には、ゼロ以外の値が25%しかない配列のスパースを気にすることはめったにありません。あなたが私を信じていないのなら、自分で試してみてください。
A = sprand(2000,2000,0.25);
tic,B = A*A;toc
Elapsed time is 1.771668 seconds.
Af = full(A);
tic,B = Af*Af;toc
Elapsed time is 0.499045 seconds.
スパース行列としてこれに関連する余分な作業は、コストがかかりすぎて、煩わしい価値がありません。次に、本当にスパースな行列で試してみてください。
A = sprand(2000,2000,0.005);
Af = full(A);
tic,B = A*A;toc
Elapsed time is 0.037763 seconds.
tic,B = Af*Af;toc
Elapsed time is 0.446680 seconds.
もちろん、あなた自身の問題は異なりますが、それほど違いはありません。スパース行列は、真にスパース行列を使用する人にとって真の恩恵ですが、25%の非ゼロは、ほとんどの場合、ゲインを得るのに十分な「スパース」ではありません。
于 2010-07-20T19:41:46.407 に答える
4
編集-質問を読み間違えました。
75%のスパース性では、スパース行列アルゴリズムを使用するとパフォーマンスが大幅に向上することがよくあります。ぜひ試してみる価値はあると思います。
メモリを節約する2つの場所(メモリ使用量を4分の1に削減)と操作(たとえば、行列とベクトルの乗算を実行するたびに、必要な操作の数を大幅に削減できます)。あなたの場合の緩和要因は、あなたのマトリックスのサイズかもしれません。スパース行列演算に移行すると、通常、密度行列で見られる優れたキャッシュ特性が失われます。したがって、通常、密から疎への移行が効率の向上につながるしきい値があります。
于 2010-07-20T17:06:13.617 に答える