0

スパースなベクトルがN kx1あり、それらのそれぞれに転置を掛けて N 平方行列を作成し、それを合計する必要があります。目的の出力はkbyk行列です。これをループで実行し、arrayfun を使用しようとしましたが、どちらのソリューションも遅すぎます。おそらく、あなたのいずれかがより速いものを思い付くことができます。以下は、私が思いついた最適なソリューションに関する具体的な詳細です。

mdev_big各ベクトルを含む疎行列kによるものです。NN

fun_sigma_i = @(i) mdev_big(:,i)*mdev_big(:,i)';

sigma_i = arrayfun(fun_sigma_i,1:N,'UniformOutput',false);

sigma = sum(reshape(full([sigma_i{:}]),k,k,N),3);

このプロセスの遅い部分はsigma_iいっぱいになることですが、それ以外の方法で 3D 配列に再形成することはできません。また、reshape の代わりに cat (遅い)、full の代わりに ndSparse (かなり遅い) fun_sigma_i、スパース行列ではなく完全な行列を返す (遅い) ことも試しました。

助けてくれてありがとう!、

4

0 に答える 0