2013-10-04 4 views

답변

3

y=~isnan(x) 정도면됩니다.

x(k,y(k,:))의 행은 k 번째 행의 not-Nans에 x을 제공합니다. 그래서 그것은 zx의 not-Nans 값을 모으고있는 것 같습니다 (이상한 방법으로). y(k,:)은 열의 논리적 색인 역할을합니다. 여기서 true은 "해당 열 포함"을 의미하고 false은 "포함하지 않음"을 의미합니다. 당신의 마지막 질문에 대해서는

: z은 하나 개의 차원을 가지고 있기 때문에 [z{:,:}][z{:}]이 경우 동등한이며, 셀 어레이 z의 내용을 수평을 연결합니다. 예를 들어 z{1} = [1; 2]; z{2} = [3 4; 5 6];의 경우 [1 3 4; 2 5 6]이 표시됩니다. 그러므로 m이고, z을 구성하는 행의 행 수는이고, n은 열 수의 합계입니다 (이 예에서는 m은 2이고 n은 3이됩니다). 그러한 공통 수의 행이 없으면 오류가 발생합니다. 예를 들어 z{1} = [1 2]; z{2} = [3 4; 5 6]; 일 경우 [z{:}] 또는 [z{:,:}]은 오류를 발생시킵니다.

최종 결과 d은 증가 행과 그 다음 증가 열로 정렬 된 x의 not-Nans를 포함하는 행 벡터입니다.

xt = x.'; 
d = xt(~isnan(xt(:))).'; 

이 더 간단하고 더 많은 Matlab과 유사하고 더 빠를수록 더 쉽게 얻을 수있었습니다.

+0

아, x (k, (k :))로 행을 입력하는 중에 오류가 발생했습니다. x (k, z (k :)) 여야합니다. 코드에서 수정했습니다. 논리적 배열에 의한 인덱싱 (수정 된 행에서)과 함께 수평 연결은 비 NaN 숫자를 선택하고 연결하는 것처럼 의미가 있지만 어떤 크기/차원 배열 z가 유지되는지는 확실하지 않습니다 (즉, 어떤 크기/차원 배열은 논리적 배열로 인덱싱하여 만들어집니다. 또한 당신이 줄을 어떻게 참고 [n, m] = 크기 (d)가 아니라, [n, m] = 크기 (d) n & m;의 의미를 뒤집 었다고 생각합니다. – composerMike

+0

당신은 m과 n에 대해 맞습니다. 그리고 수정하면 코드가 더 적합 해집니다. 업데이트 된 답변을 참조하십시오. –

+1

코드는 이상한 방식으로 결과 ('d')를 얻습니다. Matlab에서 표준화 된 방법은 아닙니다. 루프는 여기에서 쉽게 피할 수 있습니다. 셀 배열은 분명히 필요하지 않습니다. 왜 행으로 작업합니까? 네가 어디에서 가져 왔는지 물어봐도 될까? 자동 생성되거나 번역 된 코드 일종의? –