2013-10-05 3 views
0

이 문제가 발생했습니다. 내 데이터 배열에서 그룹간에 중요한 값을 찾을 수 있습니다. 내 솔루션했다 :이 다른 일반적인 솔루션에 온 사용자에게중요한 값을 확인하기 위해 bsxfun을 수정하십시오.

Data = [1.8,1.4, 1.5; 
60, 70, 80; 
20, 40, 5]; 

Error = [0.2, 0.1, 0.4; 
20, 30, 10; 
10,5,2]; 

    k = 1; 

for i = 1: size(Data,1) 

    if ((Data(i,1)-Error(i,1)) > (Data(i,2)+Error(i,2))) 

     selectedpar(k,1:3) = [i ,1, 2]; 

     k = k+1; 
    end 

    if ((Data(i,1)-Error(i,1)) > (Data(i,3)+Error(i,3))) 

     selectedpar(k,1:3) = [i , 1, 3]; 

     k = k+1; 
    end 

    if ((Data(i,2)-Error(i,2)) > (Data(i,3)+Error(i,3))) 

     selectedpar(k,1:3) = [i , 2, 3]; 

     k = k+1; 
    end 

end 

selectedpar = [1 1 2 
3 1 3 
3 2 3] 

감사

DM = Data-Error; 
DP = Data+Error; 
selectedpar = []; 
for k=1:size(Data,1) 
    [I,J]=find(tril(bsxfun(@gt, DM(k,:), DP(k,:).'))); 
    selectedpar = [selectedpar ; k+zeros(size(I)), J, I]; %#ok<AGROW> 
end 

지금은 또 다른 조건을 추가 할 것 (조건이있는 경우의 제거 시리즈) : 대신에, 특히 내가

if ((Data(i,1)-Error(i,1)) > (Data(i,2)+Error(i,2)) || (Data(i,1)+Error(i,1)) < (Data(i,2)-Error(i,2))) etc... 

를 확인하려는 경우 하나는 나의 추한 솔루션이 될 것

k = 1; 

for i = 1: size(Data,1) 

    if ((Data(i,1)-Error(i,1)) > (Data(i,2)+Error(i,2)) || (Data(i,1)+Error(i,1)) < (Data(i,2)-Error(i,2))) 

     selectedpar(k,1:3) = [i ,1, 2]; 

     k = k+1; 
    end 

    if ((Data(i,1)-Error(i,1)) > (Data(i,3)+Error(i,3)) || (Data(i,1)+Error(i,1)) < (Data(i,3)-Error(i,3))) 

     selectedpar(k,1:3) = [i , 1, 3]; 

     k = k+1; 
    end 

    if ((Data(i,2)-Error(i,2)) > (Data(i,3)+Error(i,3)) || (Data(i,2)+Error(i,2)) < (Data(i,3)-Error(i,3))) 

     selectedpar(k,1:3) = [i , 2, 3]; 

     k = k+1; 
    end 

end 

selectedpar = [1 1 2 
3 1 2 
3 1 3 
3 2 3] 

난에서 말했듯이 나는

감사

+0

: 다음 다른 selectedpar = ... 라인과 결과를 수집 – gabboshow

답변

0

을 새로운 경우 조건 (수술실 후 하나)의 두 번째 부분을 추가 bsxfun을 수정하는 방법 (올바른 솔루션)

이전 질문에 댓글을 달기 : DMDP을 교환하고 @gt@lt으로 변경하여 다른 bsxfun 행을 추가하기 만하면됩니다. 나는 또한 만약 다른 계산 triu에 조원을 변경하는 방법에 대한 확실하지 않다

DM = Data-Error; 
DP = Data+Error; 
selectedpar = []; 
for k=1:size(Data,1) 
    [I,J]=find(tril(bsxfun(@gt, DM(k,:), DP(k,:).'))); 
    selectedpar = [selectedpar ; k+zeros(size(I)), J, I]; %#ok<AGROW> 
    [I,J]=find(tril(bsxfun(@lt, DP(k,:), DM(k,:).'))); %%%NEW LINE 
    selectedpar = [selectedpar ; k+zeros(size(I)), J, I]; %#ok<AGROW> %%%NEW LINE 
end 
관련 문제