繁体   English   中英

排序python多维数组?

[英]sorting a python multi-dimensional array?

我声明了一个多维数组,可以使用numpy接受不同的数据类型

count_array = numpy.empty((len(list), 2), dtype = numpy.object)

第一个数组有字符串,第二个数组有数字。 我想根据数字对两列进行排序......

有没有比sort()方法更简单的方法来做到这一点?

考虑将数组改为结构化数组

count_array = np.empty((len(list),), dtype=[('str', 'S10'), ('num', int)])

然后,您可以按特定键排序:

np.sort(arr, order='num')

您可以argsort第二列,然后在行上使用所谓的“fancy-indexing”:

import numpy as np
count_array = np.array([('foo',2),('bar',5),('baz',0)], dtype = np.object)
print(count_array)
# [[foo 2]
#  [bar 5]
#  [baz 0]]

idx = np.argsort(count_array[:, 1])
print(idx)
# [2 0 1]

print(count_array[idx])
# [[baz 0]
#  [foo 2]
#  [bar 5]]

我建议这一点:

首先,像unutbu一样,我将使用numpy.array构建列表

import numpy as np
count_array = np.array([('foo',2),('bar',5),('baz',0)], dtype = np.object)

然后,我使用operator.itemgetter排序:

import operator
newlist = sorted(count_array, key=operator.itemgetter(1))

这意味着:使用索引1对count_array wrt参数进行排序,即整数值。

输出是

[array([baz, 0], dtype=object), array([foo, 2], dtype=object), array([bar, 5], dtype=object)]

我可以重新安排。 我这样做

np.array([list(k) for k in newlist], dtype=np.object)

我得到一个与以前格式相同的numpy数组

array([[baz, 0],
       [foo, 2],
       [bar, 5]], dtype=object)

最后,整个代码看起来像那样

import numpy as np
import operator

count_array = np.array([('foo',2),('bar',5),('baz',0)], dtype = np.object)

np.array([list(k) for k in sorted(count_array, key=operator.itemgetter(1))], dtype=np.object)

最后一行执行请求的排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM