Matlab中的右循环移位

时间:2017-07-06 16:34:27

标签: matlab

我在尺度A的Matlab中有一个矩阵mxn,由零和1组成,维度J的矩阵mx1报告来自{{1}的一些整数}。

我想构建一个维度{1,...,n}的矩阵B,以便

(1)mxn

(2)对于B(1,:)=A(1,:)i=2,...,m是通过将B(i,:)右边的多个位置等于A(i,:)

来获得的

澄清:通过移动多个位置(J(1)-1)+ (J(2)-1)+...+ (J(i-1)-1) 的正确的向量C我的意思如下(更多细节{{3 }})

q

此代码执行我想要的操作

%Example 1
C=[a b c d e];
q=4; %q<size(C,2)
%a should go to position 1+q=5
%b should go to position 2+q=6 ---> 1 
%c should go to position 3+q=7 ---> 2
%d should go to position 4+q=8 ---> 3 
%e should go to position 5+q=9 ---> 4 
C_new=[b c d e a];

%Example 2
C=[a b c d e];
q=2; %q<size(C,2)
%a should go to position 1+q=3
%b should go to position 2+q=4  
%c should go to position 3+q=5
%d should go to position 4+q=6 ---> 1 
%e should go to position 5+q=7 ---> 2 
C_new=[d e a b c];

然而,m=4; n=5; A=[1 1 1 1 1; ... 0 0 1 0 0; ... 1 0 1 0 1; ... 0 1 0 0 1]; J=[1;2;1;4]; B=zeros(m,n); B(1,:)=A(1,:); foridx=cumsum(J); for i=2:m shift=foridx(i-1)-(i-1); newidx=(1:1:n)+shift; for j=1:n if newidx(j)>n newidx(j)=newidx(j)-n; end end for j=1:n B(i,newidx(j))=A(i,j); end end 大的速度非常慢。你能建议一些矢量化算法吗?

感谢下面的建议,我可以将代码修改为

m,n

仍然,我想删除 B=zeros(m,n); B(1,:)=A(1,:); foridx=cumsum(J); for i=2:m shift=foridx(i-1)-(i-1); B(i,:)=circshift(A(i,:).',shift,1); end 上的循环。有什么建议吗?

0 个答案:

没有答案