基于多个列对包含numpy文本数组中的数字的列进行排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于多个列对包含numpy文本数组中的数字的列进行排序相关的知识,希望对你有一定的参考价值。
如何对以下矩阵进行排序:
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]))
Traceback(最近一次调用最后一次):
文件“<ipython-input -...>”,第1行,已排序(A,键= lambda k:(k [0],k [2], - k [1]))
TypeError:一元的坏操作数类型 - :'numpy.str_'
答案
您必须将切片值转换为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')]
另一答案
错误说你不能否定numpy.str_
对象的声音逻辑。但是为了解决你的问题,我建议你先用反向排序和密钥k[1]
对数组进行排序,然后用另外两个键对这个结果进行排序。
t = sorted(A, key = lambda k: k[1], reverse=True)
t = sorted(t, key = lambda k: (k[0],k[2]))
以上是关于基于多个列对包含numpy文本数组中的数字的列进行排序的主要内容,如果未能解决你的问题,请参考以下文章