2013-10-03 3 views
0

저는 데이터가 포함 된 행렬 Data (n x m)을 가지고 있습니다 (그룹 간 평균). n은 "관심있는 매개 변수"의 수입니다 (예 : 높이, 무게 등). m은 그룹입니다 (그룹 1, 그룹 2 등) Error은 데이터의 표준 편차를 포함하는 행렬 (nxm)입니다. . (, m = 그룹 1 그룹 2의 그룹 3 N = 중량, 높은)평균 및 표준 편차가있는 중요한 값을 선택하십시오.

Data = [4.12502560163850,4.51407107506505, 0.592984328663462; 
5.29560931899642,5.26306387164821,0.525691390848871]; 
Error = [12.0003478648892, 12.4431683689277, 1.77834685956325; 
10.3910686148834,17.1175178471769,1.33979258445445] 

이제 I 데이터 및 오류 (2 × 3) 인 경우 예를 들어 ... 만 중요한 데이터를 선택하려는 중요한 데이터의 값만 선택하고 싶습니다. 즉 (그룹 1의 높이 - 그룹 1의 표준 편차는 그룹 2의 높이 + 높이 그룹 2의 표준 편차 여야 함) 또는 (그룹 1의 높이 - 높이 그룹 1의 표준 편차는 그룹의 높이 3 + 높이 그룹의 표준 편차 3).

이 특별한 경우

나는 ...

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,3)+Error(i,3))) 

    selectedpar(k) = i; 

    k = k+1; 

end 

내 문제는 내가 사전에 데이터의 크기를 모르는 나는 동적 상태의 경우 만들 것이다

감사

을 할 수
+0

'size (Data)'를 사용하여 'n'과 'm'을 얻습니다. – Shai

+0

예 크기 명령을 알고 있습니다 :). 아마 내가 명확하지 않다 ... 문제는 그룹의 증가에 따라 다른 n 값과 값을 비교해야한다는 것입니다 ... a> b || a> c || a> d .... – gabboshow

+0

'bsxfun'과 vectorrize를 사용하십시오. – Shai

답변

0

이것은 필요한 것이지만 for-loop없이 개선해야하지만 시간이 없습니다.

myDataLen = 1:size(Data,2); 
selectedpar = []; 
for i = 1:size(Data,2)  
    otherIndice = find(myDataLen ~= i); 
    for j = 1:size(otherIndice,2) 
     idx = find(Data(:,i)-Error(:,i) > Data(:,otherIndice(j))+Error(:,otherIndice(j))) 
     if(size(idx,1) > 0) 
      selectedpar(end+1) = i; 
     end   
    end  
end 
관련 문제