我正在尝试获取索引以按最后一个轴对多维数组进行排序,例如

>>> a = np.array([[3,1,2],[8,9,2]])

我想要索引i这样,
>>> a[i]
array([[1, 2, 3],
       [2, 8, 9]])

根据numpy.argsort的文档,我认为应该这样做,但出现错误:
>>> a[np.argsort(a)]
IndexError: index 2 is out of bounds for axis 0 with size 2

编辑:我需要以相同的方式重新排列其他相同形状的数组(例如b这样的数组a.shape == b.shape)...
>>> b = np.array([[0,5,4],[3,9,1]])
>>> b[i]
array([[5,4,0],
       [9,3,1]])

最佳答案

上面的答案现在已经过时了,因为在numpy 1.15中添加了新功能以使其更简单。 take_along_axis(https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.take_along_axis.html)允许您执行以下操作:

>>> a = np.array([[3,1,2],[8,9,2]])
>>> np.take_along_axis(a, a.argsort(axis=-1), axis=-1)
array([[1 2 3]
       [2 8 9]])

关于python - 用于多维ndarray的argsort,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33140674/

10-11 22:48
查看更多