order
매개 변수는 구조 배열에 적용 lexsort
비슷한 일종의
In [402]: arr=np.column_stack((np.arange(10),10-np.arange(10)))
In [403]: np.lexsort((arr[:,1],arr[:,0]))
Out[403]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32)
In [404]: np.lexsort((arr[:,0],arr[:,1]))
Out[404]: array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0], dtype=int32)
'주문'제공, 2 차원 배열로
In [383]: arr=np.zeros((10,),dtype='i,i')
In [385]: for i in range(10):
...: arr[i] = (i,10-i)
In [386]: arr
Out[386]:
array([(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
In [387]: np.sort(arr, order=['f0','f1'])
Out[387]:
array([(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
In [388]: np.sort(arr, order=['f1','f0'])
Out[388]:
array([(9, 1), (8, 2), (7, 3), (6, 4), (5, 5), (4, 6), (3, 7), (2, 8),
(1, 9), (0, 10)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
개체 배열을 사용하여 att 이러한 구조 중 하나에 ributes :
In [407]: np.array([(a.a, a.b) for a in arr])
Out[407]:
array([[ 0, 10],
[ 1, 9],
[ 2, 8],
....
[ 7, 3],
[ 8, 2],
[ 9, 1]])
In [408]: np.array([(a.a, a.b) for a in arr],dtype='i,i')
Out[408]:
array([(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3),
(8, 2), (9, 1)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
파이썬 sorted
기능
In [421]: arr
Out[421]:
array([<__main__.Obj object at 0xb0f2d24c>,
<__main__.Obj object at 0xb0f2dc0c>,
....
<__main__.Obj object at 0xb0f35ecc>], dtype=object)
In [422]: sorted(arr, key=lambda a: (a.b,a.a))
Out[422]:
[<__main__.Obj at 0xb0f35ecc>,
<__main__.Obj at 0xb0f3570c>,
...
<__main__.Obj at 0xb0f2dc0c>,
<__main__.Obj at 0xb0f2d24c>]
귀하의 Obj
클래스가 좋은 __str__
방법이 없습니다 arr
(또는 목록에 해당)에서 작동합니다. arr
요소의 값을 보려면 [(i.a, i.b) for i in arr]
과 같은 것을 사용해야합니다.
주석에 언급했듯이이 예제의 경우 목록은 객체 배열보다 훨씬 좋습니다.
In [423]: alist=[]
In [424]: for i in range(10):
...: alist.append(Obj(i,10-i))
목록 append
은 반복되는 배열 추가보다 빠릅니다. 그리고 객체 배열은 특히 1d 일 때 목록에 비해 많은 기능을 추가하지 않으며 객체는 이와 같은 사용자 정의 클래스입니다. arr
에서 수학 연산을 수행 할 수 없으며, 정렬을 쉽게 이해할 수 있습니다.
numpy는 데이터 형식에 대한 클래스를 지원합니까? np.array ([], dtype = Obj)'? –
개체 배열보다는 목록을 사용하고 싶습니다. 목록 추가가 빠릅니다. 목록 정렬을 사용하면 키 매개 변수를 정렬 할 수 있습니다. – hpaulj
어쩌면 당신은 [구조화 된 배열] (https://docs.scipy.org/doc/numpy/user/basics.rec.html)을 찾고있을 것입니다. 그들은 파이썬 클래스와 직접 작동하지 않습니다. – user7138814