2010-01-15 3 views
3

많은 배열 메서드는 배열이 다차원 임에도 불구하고 단일 인덱스를 반환합니다. 예를 들어 두 개의 치수Numpy : 한 차원의 인덱스를 여러 차원으로 변환

a = rand(2,3) 
z = a.argmax() 

, 최대의 요소의 매트릭스 인덱스를 쉽게 찾을 수 :

a[z/3, z%3] 

하지만 더 치수, 그것은 성가신 될 수 있습니다. Numpy/Scipy는 하나의 (축소 된) 차원에 인덱스를 제공하면 여러 차원의 인덱스를 반환하는 간단한 방법이 있습니까? 감사.

+0

어쩌면 짜증나지만, 꽤 할 수 있습니다. –

+0

실제로 그렇습니다! 아래를 참조하십시오. –

답변

5

알 수 있습니다.

a = X.argmax() 
(i,j) = unravel_index(a, X.shape) 
+1

감사합니다. 흥미로운 점은 실제로 해킹 없이는 내 솔루션으로 해결할 수없는 몇 가지 문제를 해결하는 데 도움이된다는 것입니다. 여기서 b의 sape는 –

1

내가 당신이 원하는 않는 내장 함수의 모르겠지만,이 나를 위해왔다 어디, 내가 정말하고 싶었던 것을이 것을 깨달았다 :

2 개 어레이 주어진 것은, 동일한 형상을 가진 B, 이에 대한

최대 요소로 에서 동일한 위치 인 B의 요소 (동일한 [I, J, K ...] 위치)를 찾아 빠른 numpy-ish 솔루션은 다음과 같습니다.

j = a.flatten().argmax() 
corresponding_b_element = b.flatten()[j] 

빈스 Marchetti

관련 문제