두 개의 ND 배열 (10 * 4 * 4 * 2 * 4)이 있습니다. 여기서 첫 번째 열의 최대 값을 찾고 두 번째 열과 동일한 위치의 요소를 추출하려고합니다. 내가 가진 최대의 요소의 인덱스를 찾아 지금matlab에서 ND 배열의 특정 위치에서 여러 요소를 추출하는 방법은 무엇입니까?
A = randi(100,4,3,2);
B = randi(10,size(A));
을 :
[~,ind] = max(A);
그리고 내가 원하는
내가 다음과 같이 A와 B가의 가정하자 상황이 간단하게하려면B
에서 요소를 추출하려면
ind
을 사용하십시오. 최적의 옵션은
C = B(ind)
과 같지만 분명히 작동하지 않습니다. Matlab은
C
의 크기가
ind
(즉, 1 * 3 * 2)이되는 것을 제외하고는
C = B(ind(:))
을 쓰는 것처럼 선형 인덱싱으로
ind
을 참조합니다.
m = {ind,':',':'};
C = B(m{:})
을하지만이 ind
가 B
각 열의 선형 색인 인 크기 6 * 3 * 2의 배열 결과
그래서 (I는 here을 발견)의이 같은 시도 . 물론 루프를 사용해도되지만,보다 효율적이고 우아한 방법이 있다고 확신합니다.
예 :
A(:,:,1) =
40 89 30
73 77 30
59 61 14
29 2 30
A(:,:,2) =
82 79 5
3 40 62
46 76 42
22 52 74
B(:,:,1) =
5 1 9
3 3 5
8 4 4
8 3 9
B(:,:,2) =
1 4 3
5 4 8
10 8 5
9 1 3
ind(:,:,1) =
2 1 1
ind(:,:,2) =
1 1 4
그래서 결과가 있어야한다 :
C =
3 1
1 4
9 3
나는 일반적인 솔루션을 찾아 주, 그리고이 예에만 치수에 맞는 하나. 당신이 선형 인덱스로 (하위) 인덱스로 변환하는 sub2ind
을 사용할 수 있습니다 세 가지 차원를 들어
이 예에서'C'의 원하는 크기 (모양) 무엇입니까? –
'C'는'squeeze (ind)'처럼 보일 것입니다. – EBH
그게 내 솔루션 않습니다. –