我正在尝试将所有的代码转换为Python。我想对一个有两列的数组进行排序,排序必须基于第二列的升序。然后我需要对第一列的数据求和(例如,从第一行到第100行)。我使用了"Data.sort(axis=1)",但它不起作用。有没有人有解决这个问题的想法?
使用 .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 ]])
您现在可以在要排序的列上调用.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]])
您可以等价地使用 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]])
sorted(Data, key=lambda row: row[1])
可以实现此功能。
Data
是一个平面列表,为什么对其进行排序会导致一个列表的列表呢? - a p