2012-02-26 2 views
2

없는 조건 matices A를가있는 경우 (N, 1), B (N, 1) matlab에 루프

for i=1:m 
    if (A(i, 1) > error) 
     B(i,1) = 0; 
    else 
     B(i,1) = exp (-A(i,1)/100) 
    end 
end 

어떻게 모든 루프를 사용하지 않고,이 조건을 재 기입하는 루프 내부 다음 조건?

idxs = (A > error); 
B(idxs) = 0; 
B(~idxs) = exp(-A(~idxs)/100); 

답변

7

사용 logical indexing 같은 가능한 일입니다. 핵심은 "논리적 색인"을 형성하는 것입니다. (가) (:,1)(i,:)이 경우 필요하지 않습니다하지만 그들은 초기 배합에 있던대로, 나는 그들을 떠났다. 당신이 인 경우에 당신의 행렬 A와 B는 벡터 (한 차원 행렬) 때문에

i = A(:,1) > error; 

B(i,:) = 0; 
B(~i,:) = exp (-A(:,1)/100); 

, 대신에 다차원 행렬 (m * n)을 사용하면

대신 i = A > error;을 수행하여 (m * 1)이 아닌 (m * n) 논리 인덱스를 구성 할 수 있습니다.
2

당신은 당신의 제안에 가까웠다 : 그것은 그

if (A(:, 1) > error) 
     B(:,1) = 0; 
    else 
     B(:,1) = exp (-A(:,1)/100) 
end