0
문서화되지 않은 Matlab 코드를 받았고 그 기능을 이해하려고했습니다. 나는 코드에 interspersed 의견으로 아래 내 주요 질문을 넣어했습니다.matlab, 셀 배열, 논리 배열 인덱싱 및 배열 유형 변환
문서화되지 않은 Matlab 코드를 받았고 그 기능을 이해하려고했습니다. 나는 코드에 interspersed 의견으로 아래 내 주요 질문을 넣어했습니다.matlab, 셀 배열, 논리 배열 인덱싱 및 배열 유형 변환
약 y=~isnan(x)
정도면됩니다.
x(k,y(k,:))
의 행은 k
번째 행의 not-Nans에 x
을 제공합니다. 그래서 그것은 z
이 x
의 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과 유사하고 더 빠를수록 더 쉽게 얻을 수있었습니다.
아, x (k, (k :))로 행을 입력하는 중에 오류가 발생했습니다. x (k, z (k :)) 여야합니다. 코드에서 수정했습니다. 논리적 배열에 의한 인덱싱 (수정 된 행에서)과 함께 수평 연결은 비 NaN 숫자를 선택하고 연결하는 것처럼 의미가 있지만 어떤 크기/차원 배열 z가 유지되는지는 확실하지 않습니다 (즉, 어떤 크기/차원 배열은 논리적 배열로 인덱싱하여 만들어집니다. 또한 당신이 줄을 어떻게 참고 [n, m] = 크기 (d)가 아니라, [n, m] = 크기 (d) n & m;의 의미를 뒤집 었다고 생각합니다. – composerMike
당신은 m과 n에 대해 맞습니다. 그리고 수정하면 코드가 더 적합 해집니다. 업데이트 된 답변을 참조하십시오. –
코드는 이상한 방식으로 결과 ('d')를 얻습니다. Matlab에서 표준화 된 방법은 아닙니다. 루프는 여기에서 쉽게 피할 수 있습니다. 셀 배열은 분명히 필요하지 않습니다. 왜 행으로 작업합니까? 네가 어디에서 가져 왔는지 물어봐도 될까? 자동 생성되거나 번역 된 코드 일종의? –