我需要循环移动矩阵的各个列。
如果您想将所有列移动相同的数量,这很容易,但是,在我的情况下,我需要将它们全部移动不同的数量。
目前我正在使用循环,如果可能的话,我想删除循环并使用更快的基于矢量的方法。
我当前的代码
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
是否可以从此代码中删除循环?
更新 我测试了所有三种方法,并将它们与这个问题中描述的循环进行了比较。我计算了在 1000x1000 矩阵上执行 100 次逐列循环移位需要多长时间。我重复了这个测试几次。
结果:
- 我的循环耗时超过 12 秒
- Pursuit的建议不到一秒
- Zroth 的原始回答只用了 2 秒多一点
- Ansari 的建议比原始循环慢