Matlab에서 행렬에 대한 논리 인덱스를 만들 때 상대 위치를 유지하기 위해 NaN (또는?) 행렬을 초기화해야하는 것처럼 보입니다. 예를 들어, 다음 예제를 고려하십시오매트릭스 리턴 벡터의 논리적 인덱싱 - 초기화 필요?
위의 코드에 명시된 바와 같이clear all; close all; clc;
Data = [1 2 3 4; 3 40 5 6; 5 6 7 8];
ind = logical([0 0 0 0;0 1 1 0;0 1 0 0]);
tic
x1 = NaN * ones(3,4);
y1 = NaN * ones(1,4); y2 = y1;
x1(ind) = Data(ind); % writing to pre-allocated NaN matrix (necessary?)
y1(1:4) = nanmean(x1,1); % take NaN-mean - good result
toc
% Can we get rid of x1? The following obviously does not work:
y2(1:4) = nanmean(Data(ind),1);
, Data(ind)
은 원래 크기를 유지하지, 벡터를 반환합니다. 지금까지 가지고있는 유일한 해결책은 올바른 크기로 초기화 된 x1
을 사용하는 것입니다. 그래서 : 전체 (x1
) NaN 행렬이 필요합니까? 이것이 어떻게 피할 수 있는지에 대한 아이디어가 있습니까? 이 코드의 속도를 높이려고 노력하면서 for 루프를 찾고 있지 않습니다.
'Data'가, 수 있도록 우리가 출력으로 이어질? – Divakar
여러 개의 다른 선택 항목에 대해 '데이터'를 사용할 수 있습니다. 그래서 덮어 쓰지 않으면 나는 그것을 선호한다. –