快速代码而不是for循环使用if

时间:2016-06-15 07:28:19

标签: 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;
    else
            D(i,2)=C(A(i,1),B(i,1));
    end
else
                D(i,2)=0;
end
end

1 个答案:

答案 0 :(得分:2)

好吧,你可以使用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 =

    0   11
    1    7
    2    0
    3    7
    4    0
    5    0