2014-04-09 2 views
0

<206x193> 행렬 A입니다. 여기에는 193 개의 시간 간격으로 206 개의 다른 위치에 매개 변수 값이 포함됩니다. 나는 모든 시간에 걸쳐 각 위치의 최대 값과 해당 지수에 관심이 있습니다. 나는 A의 동일한 차원을 가진 또 다른 행렬 B을 가지고 있으며 그 위치에있는 A의 값이 최대 였을 때 각 위치의 값에 관심이 있습니다.인덱스가있는 특정 치수에 따른 2D 행렬의 최대 값 찾기

올바른 최대 값을 제공하는 [max_val pos] = max(A,[],2)을 시도했지만 A(pos)max_val과 같지 않습니다.

이 기능은 정확히 어떻게 작동합니까?

나는 더 작은 예제도 시도했다. 그럼에도 불구하고 나는 인덱스의 의미 ....

>> H 

H(:,:,1) = 

    1  2 
    3  4 

H(:,:,2) = 

    5  6 
    7  8 

>> [val pos] = max(H,[],2) 

val(:,:,1) = 

    2 
    4 

val(:,:,2) = 

    6 
    8 

pos(:,:,1) = 

    2 
    2 

pos(:,:,2) = 

    2 
    2 

답변

0

idx의 인덱스가 해당 행의 최대 값의 인덱스를 나타냅니다를 이해하지 않습니다. 귀하의 예제에서

B_Amax=B(sub2ind(size(A), (1:size(A,1))', idx)); 

:

H(:,:,2) = 

5  6 
7  8 

[val pos] = max(H,[],2) 

val(:,:,2) = 

6 
8 

pos(:,:,2) = 

2 
2 
테스트 할 경우 마찬가지로 A(pos)=max_val

A=rand(206, 193); 
[max_val, idx]=max(A, [], 2); 
A_max=A(sub2ind(size(A), (1:size(A,1))', idx)); 

는, 당신이 B의 값을 액세스 할 수있는 경우는 선형 인덱스를 만들 sub2ind을 사용할 수 있습니다

pos(:,:,2)[2; 2] 인 이유는 최대 값이 두 행의 위치 2에 있기 때문입니다.

0

최대는 주로 벡터와 함께 사용하기위한 것입니다. 일반 모드에서 다차원 배열조차도 max 함수가 적용되는 일련의 벡터로 처리됩니다.

그래서, 당신은

// find the maximum values and positions in A 
[c,i] = max(A, [], 2); 
// iterate along the first dimension, to retrieve the corresponding values in B 
C = []; 
for k=1:size(A,1) 
    C(k) = B(k,i(k)); 
end 

당신은 매트릭스 C

을 만드는 좀 더 간결한 방법을 @로 Jigg의 답변을 참조 할 수 있어야 A가 최대 인 시간에 각 위치에서 B의 값을 얻을 수