我正在尝试将所有代码转换为Python。我想排序一个有两列的数组,以便排序必须基于第二列的升序。然后我需要对第一列数据求和(从第一行到第100行)。我使用“Data.sort(axis = 1)”,但它不起作用。有没有人有任何想法解决这个问题?
答案 0 :(得分:41)
使用.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]])
答案 1 :(得分:4)
sorted(Data, key=lambda row: row[1])
应该这样做。