如何根据python中的第二列对二维数组(numpy.ndarray)进行排序? [英] How to sort 2D array (numpy.ndarray) based to the second column in python?
问题描述
我正在尝试将我的所有代码转换为 Python.我想对一个有两列的数组进行排序,以便排序必须基于升序的第 2 列.然后我需要对第一列数据求和(例如,从第一行到第 100 行).我使用了Data.sort(axis=1)",但它不起作用.有没有人有解决这个问题的想法?
Use .argsort()
它返回一个 numpy.array
索引,对给定的 numpy.array
.您可以将其称为函数或数组上的方法.例如,假设您有
将 numpy 导入为 nparr = 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 ]])
您现在可以在要排序的列上调用 .argsort()
,它将为您提供一个行索引数组,对特定列进行排序,您可以将其作为索引传递给您的原始数组.
你可以等效地使用 numpy.argsort()
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?
Use .argsort()
it returns an numpy.array
of 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
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.
>>> 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()
>>> 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]])
这篇关于如何根据python中的第二列对二维数组(numpy.ndarray)进行排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!