我在尺度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
上的循环。有什么建议吗?