2017-03-15 2 views
0

행렬이 X = [x1,y1;...;xn,yn];이고 벡터가 index(1,n)입니다. index의 값은 1과 5 사이입니다.루프가없는 Matlab 행렬 연산

인덱스에 따라 5 개의 행렬 X1, ..., X5를 X로 나누고 싶습니다.

예 :

X = [1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8]index = [1,2,3,5,4,4,5,1]

그래서, 내가 X1 = [1,1;8,8], X2 = [2,2] 등 싶어 ...

조건은을 최소화하기 위해 경우 조건 X를 통해 루프를 사용하지 않는 것입니다 수십억 포인트가 있다면 실행 시간.

감사합니다.

답변

0

:

X = [1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8]; 
index = [1,2,3,5,4,4,5,1]; 

[email protected](x)X(index==x,:); 
subX = arrayfun(Xi,1:5,'uniformoutput',0); 

공지 사항 arrayfun 즉, 각 인덱스에 조회 기능을 적용 할 수 있습니다 모든 결과 행렬을 셀 배열에 저장합니다. 그들은 사용하여 액세스 할 수

subX{1} 

출력한다 :

1  1 
8  8 
0

논리 인덱싱을 사용하면됩니다.

X1=X(index==1,:); % This will pick all rows of X for which index has the value 1 
X2=X(index==2,:); % and the same for X2 to X5 

여전히 반복 할 수 있습니다. 당신은보다 더 값 인덱스 배열을 특히 경우에 단지 5

쉽게 원하는 서브 매트릭스에 액세스하기 위해 검색 기능을 사용할 수 있습니다