N 번째 열에 의해 누마피 충족되었으며 어레이입니다 정렬하려면 어떻게 해야 합니까?
예를 들어,
a = array([[9, 2, 3],
[4, 5, 6],
[7, 0, 5]])
array([[7, 0, 5],
[9, 2, 3],
[4, 5, 6]])
예를 들어, 내가 이 작업: [[:, 1] 는 지아리소르타 ()] '는'
이에 따라 두 번째 열에 따라 이 정렬하려면 'a', '을 나타냅니다.
& # 39 의 @steve 실제로 가장 세련된 방식으로 업무를 수행하는 것이 특징이다.
&Quot 대한 correct"; [누마피. 다리오소르] [2] 운행에서어떠한 주문하십시오 주장이 키워드 참조)
그러나 you& # 39, ll medianame 볼 수 있도록 어레이입니다 표시됨과 어레이에는 필드 (구조화된 어레이입니다).
이 " correct"; 방법은 아주 추악한 didn& 경우 처음에 어레이에는 정의하고, t # 39 보다 작은 자연수이다.
예를 들어, 정보기술 (it) 과 같은 빠른 정렬하려면 복귀하십시오 복사됩니다:
In [1]: import numpy as np
In [2]: a = np.array([[1,2,3],[4,5,6],[0,0,1]])
In [3]: np.sort(a.view('i8,i8,i8'), order=['f1'], axis=0).view(np.int)
Out[3]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
이 정렬하려면 현재 위치:
In [6]: a.view('i8,i8,i8').sort(order=['f1'], axis=0) #<-- returns None
In [7]: a
Out[7]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
이 방법을 사용할 수 있는 유일한 " order"; 인수는 오더하려면 바뀌엇어요 필드에 search by. 예를 들어, 두 번째 열에 정렬할 수 있습니다 다음 세 번째 열은 첫 번째 열을 공급해 관심용 오더할 = [& # 39, f1& # 39, & # 39, & # 39, # 39 f0& f2& # 39;;;].
[2]: http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.sort.html # 누마피. 다리오소르
a = a[a[:,2].argsort()] # First sort doesn't need to be stable.
a = a[a[:,1].argsort(kind='mergesort')]
a = a[a[:,0].argsort(kind='mergesort')]
이 열별 신규인지 0 에 대해, 1 이면 2.
파이썬 문서용으로 wiki 에서, I think you can do.
a = ([[1, 2, 3], [4, 5, 6], [0, 0, 1]]);
a = sorted(a, key=lambda a_entry: a_entry[1])
print a
출력은:
[[[0, 0, 1], [1, 2, 3], [4, 5, 6]]]
누군가 활용할 수 있도록 하는 경우는 매우 중요한 시점에 here& 프로그래밍합니다 # 39 의 성능 비교 정렬 일부를 다른 대한 제안:
import numpy as np
table = np.random.rand(5000, 10)
%timeit table.view('f8,f8,f8,f8,f8,f8,f8,f8,f8,f8').sort(order=['f9'], axis=0)
1000 loops, best of 3: 1.88 ms per loop
%timeit table[table[:,9].argsort()]
10000 loops, best of 3: 180 µs per loop
import pandas as pd
df = pd.DataFrame(table)
%timeit df.sort_values(9, ascending=True)
1000 loops, best of 3: 400 µs per loop
그래서, 마치 인덱스화를 와 [아리소르타] [1] 은 지금까지 가장 빠른 방법.
[1]: 0/reference/generated/numpy.argsort.html http://docs.scipy.org/doc/numpy-1.10
이 누마피 메일링 리스트 에서, here& # 39 의 또 다른 특징은 다음과 같습니다.
>>> a
array([[1, 2],
[0, 0],
[1, 0],
[0, 2],
[2, 1],
[1, 0],
[1, 0],
[0, 0],
[1, 0],
[2, 2]])
>>> a[np.lexsort(np.fliplr(a).T)]
array([[0, 0],
[0, 0],
[0, 2],
[1, 0],
[1, 0],
[1, 0],
[1, 0],
[1, 2],
[2, 1],
[2, 2]])
비슷한 문제가 있었습니다.
I want to 계산하십시오 정렬하려면 충족되었으며 SVD 할 내 고유값 내림차순으로. 그러나 고윳값 사이의 매핑을 간직하고 싶다. 내 첫 번째 행에 고유값 같은 열의 및 해당 고유벡터 그 아래에 있었다.
그래서 난 로렌아줌마가 정렬하려면 이차원 어레이입니다 의해 열 방향 첫 번째 행에서 내림차순을 주문.
a = a[::, a[0,].argsort()[::-1]]
그래서 어떻게 이루어집니까?
'a' 를 [0,] 내가 원하는 첫 번째 행을 정렬하려면.
이제 내가 사용하는 afaq 아리소르타 순서를 지수.
내가 사용하는 ' 1' 같도다라고 데릭쉐퍼드와 내림차순을 주문.
마지막으로 내가 사용하는 ' [::.]' 는 보기입니다 열 수 있는 올바른 순서로.
좀 더 복잡한 ',' 예 - 내림차순을 올림차순 부수적으로 열을 렉스소르 1 일 2 일. 이 '와' 이 있는 것을 보면 렉스소르 행뿐만 신규인지 (따라서 '스트') 및 우선_순위 보기입니다 마지막.
In [120]: b=np.array([[1,2,1],[3,1,2],[1,1,3],[2,3,4],[3,2,5],[2,1,6]])
In [121]: b
Out[121]:
array([[1, 2, 1],
[3, 1, 2],
[1, 1, 3],
[2, 3, 4],
[3, 2, 5],
[2, 1, 6]])
In [122]: b[np.lexsort(([1,-1]*b[:,[1,0]]).T)]
Out[122]:
array([[3, 1, 2],
[3, 2, 5],
[2, 1, 6],
[2, 3, 4],
[1, 1, 3],
[1, 2, 1]])
여기 다른 모든 솔루션 등을 고려할 때 열 (더 컴팩트형 길을 J. J & # 39 의 답).
ar=np.array([[0, 0, 0, 1],
[1, 0, 1, 0],
[0, 1, 0, 0],
[1, 0, 0, 1],
[0, 0, 1, 0],
[1, 1, 0, 0]])
함께 정렬하려면 렉스소르,
ar[np.lexsort(([ar[:, i] for i in range(ar.shape[1]-1, -1, -1)]))]
출력:
array([[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 1, 0, 0],
[1, 0, 0, 1],
[1, 0, 1, 0],
[1, 1, 0, 0]])