Matlab 快速编码,而不是使用if进行for循环
我想知道您是否在MATLAB中看到了一种快速的方法,可以将下面的“for”循环转换为更高效的单线计算Matlab 快速编码,而不是使用if进行for循环,matlab,Matlab,我想知道您是否在MATLAB中看到了一种快速的方法,可以将下面的“for”循环转换为更高效的单线计算 A=[2;4;0;6;1;0]; B=[1;3;0;4;0;5]; C=[2,4,8,5,7; 11,44,2,8,9; 43,2,1,87,3; 13,26,7,9,3; 12,2,6,3,23; 18,42,6,7,2]; for i=1:size(A,1) D(i,1)=i-1; if (A(i,1)~=0) if (B(i,1)==0) D(i,2)=0;
A=[2;4;0;6;1;0];
B=[1;3;0;4;0;5];
C=[2,4,8,5,7;
11,44,2,8,9;
43,2,1,87,3;
13,26,7,9,3;
12,2,6,3,23;
18,42,6,7,2];
for i=1:size(A,1)
D(i,1)=i-1;
if (A(i,1)~=0)
if (B(i,1)==0)
D(i,2)=0;
else
D(i,2)=C(A(i,1),B(i,1));
end
else
D(i,2)=0;
end
end
那么,您可以使用
sub2ind
:
D=zeros(numel(A),2);
D(:,1)=0:(numel(A)-1);
LinearIds=sub2ind(size(C),A(A~=0&B~=0),B(A~=0&B~=0));
D(A~=0&B~=0,2)=C(LinearIds);
输出:
那么,您可以使用
sub2ind
:
D=zeros(numel(A),2);
D(:,1)=0:(numel(A)-1);
LinearIds=sub2ind(size(C),A(A~=0&B~=0),B(A~=0&B~=0));
D(A~=0&B~=0,2)=C(LinearIds);
输出:
预先初始化
D
,例如D=[0:(大小(A,1)-1),零(1,大小(A,1))。
已经有了相当大的改进,因为您不再动态地增长向量。预先初始化D
,例如D=[0:(大小(A,1)-1),零(1,大小(A,1))。
已经有了相当大的改进,因为您不再动态地增长向量。