我声明了一个可以使用numpy
count_array = numpy.empty((len(list), 2), dtype = numpy.object)
第一个数组有字符串,第二个数组有数字。我想根据数字对两列进行排序......
有没有像sort()
方法更简单的方法来执行此操作?
答案 0 :(得分:4)
考虑将数组改为结构化数组:
count_array = np.empty((len(list),), dtype=[('str', 'S10'), ('num', int)])
然后您可以按特定键排序:
np.sort(arr, order='num')
答案 1 :(得分:3)
您可以argsort第二列,然后在行上使用所谓的“花式索引”:
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]]
答案 2 :(得分:0)
我建议这个:
首先,与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))
表示:排序count_array
w.r.t.索引为1的参数,即整数值。
输出
[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)
最后一行执行请求的排序。