Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 快速编码,而不是使用if进行for循环_Matlab - Fatal编程技术网

Matlab 快速编码,而不是使用if进行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;

我想知道您是否在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;
    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))。
已经有了相当大的改进,因为您不再动态地增长向量。