行列の個々の列を循環シフトする必要があります。
すべての列を同じ量だけシフトしたい場合、これは簡単ですが、私の場合は、すべてを異なる量だけシフトする必要があります。
現在、私はループを使用しています。可能であれば、ループを削除して、より高速なベクトルベースのアプローチを使用したいと思います。
私の現在のコード
A = randi(2, 4, 2);
B = A;
for i = 1:size( A,2 );
d = randi( size( A,1 ));
B(:,i) = circshift( A(:,i), [d, 0] );
end
このコードからループを削除することは可能ですか?
更新 3つの方法すべてをテストし、この質問で説明したループと比較しました。1000x1000マトリックスで列ごとの循環シフトを100回実行するのにかかる時間を計測しました。このテストを数回繰り返しました。
結果:
- 私のループは12秒以上かかりました
- 追跡の提案は1秒未満
- Zrothの元の回答は2秒強かかりました
- アンサリの提案は元のループよりも遅かった