如何对以下矩阵进行排序:
import numpy as np
A = np.array([['2', '2', '2', 'd'],
['1', '1', '3', 'c'],
['1', '13', '1', 'a'],
['1', '11', '3', 'b']], dtype='<U2')
是基于文本单元格中的数字还是基于多列?使用列表进行排序的方式如下:
sorted([[2, 2, 2, 'd'],
[1, 1, 3, 'c'],
[1, 13, 1, 'a'],
[1, 11, 3, 'b']], key = lambda k: (k[0],k[2],-k[1]))
Out[1]: [[1, 13, 1, 'a'], [1, 11, 3, 'b'], [1, 1, 3, 'c'], [2, 2, 2, 'd']]
但是我如何对类似于上面的列表的numpy数组A
进行排序?
第一次审判没有成功...
sorted(A, key = lambda k: (k[0],k[2],-k[1]))
回溯(最近通话最近一次):
文件“
”,第1行,在 sorted(A,key = lambda k:(k [0],k [2],-k [1])) TypeError:一元错误的操作数类型-:'numpy.str _'
答案 0 :(得分:2)
错误表明您不能否定numpy.str_
对象听起来很合逻辑。
但是为了解决您的问题,我建议您首先使用反向顺序和键k[1]
对数组进行排序,然后再使用另外两个键对结果进行排序。
t = sorted(A, key = lambda k: k[1], reverse=True)
t = sorted(t, key = lambda k: (k[0],k[2]))
答案 1 :(得分:1)
您必须将切片的值转换为int
:
sorted(A, key = lambda k: (int(k[0]),int(k[2]),-int(k[1])))
[array(['1', '13', '1', 'a'], dtype='<U2'),
array(['1', '11', '3', 'b'], dtype='<U2'),
array(['1', '1', '3', 'c'], dtype='<U2'),
array(['2', '2', '2', 'd'], dtype='<U2')]