如何根据python中的第二列对二维数组(numpy.ndarray)进行排序?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22698687/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to sort 2D array (numpy.ndarray) based to the second column in python?
提问by Sam
I'm trying to convert all my codes to Python. I want to sort an array which has two columns so that the sorting must be based on the 2th column in the ascending order. Then I need to sum the first column data (from first line to, for example, 100th line). I used "Data.sort(axis=1)", but it doesn't work. Does anyone have any idea to solve this problem?
我正在尝试将所有代码转换为 Python。我想对一个有两列的数组进行排序,以便排序必须基于升序的第 2 列。然后我需要对第一列数据求和(例如,从第一行到第 100 行)。我使用了“Data.sort(axis=1)”,但它不起作用。有没有人有任何想法来解决这个问题?
回答by a p
sorted(Data, key=lambda row: row[1])should do it.
sorted(Data, key=lambda row: row[1])应该这样做。
回答by JaminSore
Use .argsort()it returns an numpy.arrayof indices that sort the given numpy.array. You call it as a function or as a method on your array. For example, suppose you have
使用.argsort()它返回numpy.array对给定 进行排序的索引numpy.array。您可以将其作为函数或数组上的方法调用。例如,假设你有
import numpy as np
arr = np.array([[-0.30565392, -0.96605562],
[ 0.85331367, -2.62963495],
[ 0.87839643, -0.28283675],
[ 0.72676698, 0.93213482],
[-0.52007354, 0.27752806],
[-0.08701666, 0.22764316],
[-1.78897817, 0.50737573],
[ 0.62260038, -1.96012161],
[-1.98231706, 0.36523876],
[-1.07587382, -2.3022289 ]])
You can now call .argsort()on the column you want to sort, and it will give you an array of row indices that sort that particular column which you can pass as an index to your original array.
您现在可以调用.argsort()要排序的列,它会为您提供一个行索引数组,该数组对特定列进行排序,您可以将其作为索引传递给原始数组。
>>> arr[arr[:, 1].argsort()]
array([[ 0.85331367, -2.62963495],
[-1.07587382, -2.3022289 ],
[ 0.62260038, -1.96012161],
[-0.30565392, -0.96605562],
[ 0.87839643, -0.28283675],
[-0.08701666, 0.22764316],
[-0.52007354, 0.27752806],
[-1.98231706, 0.36523876],
[-1.78897817, 0.50737573],
[ 0.72676698, 0.93213482]])
You can equivalently use numpy.argsort()
您可以等效地使用numpy.argsort()
>>> arr[np.argsort(arr[:, 1])]
array([[ 0.85331367, -2.62963495],
[-1.07587382, -2.3022289 ],
[ 0.62260038, -1.96012161],
[-0.30565392, -0.96605562],
[ 0.87839643, -0.28283675],
[-0.08701666, 0.22764316],
[-0.52007354, 0.27752806],
[-1.98231706, 0.36523876],
[-1.78897817, 0.50737573],
[ 0.72676698, 0.93213482]])

