Python 数组中的值排序:';反向';此函数的关键字参数无效
我尝试按降序对数组中的值进行排序。如果我按升序尝试,它会工作,但当我按降序尝试时,我会出错Python 数组中的值排序:';反向';此函数的关键字参数无效,python,arrays,python-3.x,sorting,Python,Arrays,Python 3.x,Sorting,我尝试按降序对数组中的值进行排序。如果我按升序尝试,它会工作,但当我按降序尝试时,我会出错 e = np.array([[5.,3.,8.],[6.,7.,1.],[4.,8.,2.]]) e.sort() 结果: e = array([[3.,5.,8.],[1.,6.,7.],[2.,4.,8.]]) TypeError: 'reverse' is an invalid keyword argument for this function 现在按相反顺序: e.sort(rever
e = np.array([[5.,3.,8.],[6.,7.,1.],[4.,8.,2.]])
e.sort()
结果:
e = array([[3.,5.,8.],[1.,6.,7.],[2.,4.,8.]])
TypeError: 'reverse' is an invalid keyword argument for this function
现在按相反顺序:
e.sort(reverse=True)
结果:
e = array([[3.,5.,8.],[1.,6.,7.],[2.,4.,8.]])
TypeError: 'reverse' is an invalid keyword argument for this function
我还尝试了在操作符import itemgetter的之后执行e.sort(key=itemgetter(1))
,但出现了相同的错误(“reverse”被“key”替换)
为什么会这样?为什么它不起作用?为什么会出现此错误(这是使用键或右反转的方法)?在按升序坐好后尝试使用fliplr
为什么会这样?为什么它不起作用
只是因为函数不提供那个功能
“修复”此问题的一种方法是对感兴趣的列进行argsort。然后,您可以反转输出,并使用该输出对e
进行索引,以便按照您的意愿对项目进行排序:
>>> import numpy as np
>>> e = np.array([[5.,3.,8.],[6.,7.,1.],[4.,8.,2.]])
>>> e
array([[ 5., 3., 8.],
[ 6., 7., 1.],
[ 4., 8., 2.]])
>>> col = 0
>>> idx_asc = np.argsort(e[:, col])
>>> idx_desc = idx_asc[::-1]
>>> e[idx_desc]
array([[ 6., 7., 1.],
[ 5., 3., 8.],
[ 4., 8., 2.]])
请注意,这种方法不如传递键和reverse=True
灵活(也不太方便)。具体地说,如果您想在多个列上排序以打破关系,这种方法将失败。您不能根据使用键
或反向
关键字参数。您可以按升序排序数组,然后使用[::-1]
切片将其反转,或者使用反转()
视图。我在这里找到了我的结果:f=-np.sort(-e)
工作得很好!我的数据集中还有一些nan值,它们应该位于数组的末尾。通过使用fliplr,这些将被放在前面。否则这将是完美的。没有特别感兴趣的列,所有的行都应该单独排序。@SVerhoef--我想我不明白你对它们的理解是什么key=itemgetter(1)
。。。