2014-09-29 2 views
1

두 개의 배열, 모양이있는 Amplitudes (99,) 및 모양이있는 모드 (55714,99)라는 2D 배열의 두 배열이 있습니다. 이 두 배열을 정렬하려면 Modes 배열의 열이 진폭에 따라 정렬되도록합니다. 이는 실제로 지배적 인 모드를 찾기 위해 수행됩니다.1D 배열과 2D 배열 (열 단위)을 동시에 정렬합니다.

Amplitudes_absolute는 내 1D 배열이고 Modes_st는 내 2D 배열입니다. 둘 다 정렬되지 않습니다.

Amplitudes_absolute.shape 내가 (55714,99)로 정렬 된 모드의 모양을 유지하고 싶지만 열 정렬로를 따라 Modes_st.shape 나에게 (55714,99)

을 제공합니다 (99) 제공 Amplitudes_absolute의 오름차순 값.

내가 시도 :
Amplitudes_absolute_sorted = np.sort(Amplitudes_absolute) 

p = Amplitudes_absolute_sorted.argsort() 

Modes_sorted = Modes_st[p] 

Amplitudes_absolute_sorted, Modes_sorted = [list(x) for x in  zip(*sorted(zip(Amplitudes_absolute, Modes_st), key=itemgetter(0)))] 

Modes_sorted = np.squeeze(np.array(Modes_sorted)) #To obtain an array 

을 (99,99)과하지 (55714,99)를 제공 Modes_sorted.shape 같이 모두가 나에게 잘못된 모양을했다.

이 정렬 방법이 있습니까?

답변

1

매우 가까웠습니다. 당신이 행을 얻을 2D NumPy와 배열을 반복 할 때 때문입니다

from operator import itemgetter 
import numpy as np 

_, modes_sorted = zip(*sorted(zip(amplitudes, modes.T), key=itemgetter(0))) 
modes_sorted = np.array(modes_sorted) 

,하지만 당신은 열이 필요합니다 첫 번째 방법은 modes 배열을 전치 해결할 수 있습니다. zip은 수신 한 반복기 중 하나가 고갈되면 중지되기 때문에 원래 코드가있는 첫 99 행만 있습니다.

sorter = amplitudes.argsort() 
modes_sorted = modes[:,sorter] 

주 최초의 인덱스에 대한 :, 그래서 우리는 열이 아닌 행을 재 배열됩니다

는 NumPy와와 물론 그것은 할 쉽습니다. 또한 amplitudes을 먼저 정렬 할 필요가 없으며 직접 argsort을 사용할 수 있습니다.

+0

완벽하게 작동합니다! Danke schön! –

관련 문제