Python Numpy:按键排序函数

Python Numpy:按键排序函数,python,function,sorting,numpy,key,Python,Function,Sorting,Numpy,Key,有没有一种方法可以使用key(或comparator)函数对numpy ndarray的行进行排序,而不必转换为python列表 特别是,我需要根据此函数进行排序: c1,c2= 4,7 lambda row: c1*(row[1]/c2)+row[0] 我意识到一个可能的解决方案是用每行的键值生成一个向量,但如何根据它进行排序呢?人们是否应该设法将这种向量转换成索引向量 order= c1*(matrix[:,1]/c2)+matrix[:,0] indexes= order_to_inde

有没有一种方法可以使用key(或comparator)函数对numpy ndarray的行进行排序,而不必转换为python列表

特别是,我需要根据此函数进行排序:

c1,c2= 4,7
lambda row: c1*(row[1]/c2)+row[0]
我意识到一个可能的解决方案是用每行的键值生成一个向量,但如何根据它进行排序呢?人们是否应该设法将这种向量转换成索引向量

order= c1*(matrix[:,1]/c2)+matrix[:,0]
indexes= order_to_index( order )
return matrix[ indexes ]

这是现实的吗?

您的方法是正确的,它类似于or


正如我说的,你可以使用numpy函数。它执行您的
order\u to_index

的工作。为了获得更明确的答案,假设我们有一个数组
x
,并希望根据某个函数
func
对行进行排序,该函数接受一行
x
,并输出标量

x[np.沿_轴应用_(func,轴=1,arr=x)。argsort()]
例如

c1,c2=4,7
x=np.array([
[0, 1],
[2, 3],
[4, -5]
])
x[np.沿_轴应用_(lambda行:c1*/c2*行[1]+行[0],1,x)。argsort()]
输出:

在这种情况下,
np.甚至不需要沿着轴应用

x[(c1/c2*x[:,1]+x[:,0]).argsort()]
输出:


订单到索引
?你是说?@wiso真的!我从来没有想到,这和给索引排序键值向量和按它排序是同一个问题!只要试试:
np.argsort([3,6,2,2,8])#->数组([2,3,0,1,4])
。它不会对原始输入进行排序。通常numpy函数没有边effects@wiso事实上,我刚刚编辑了我的最后一篇文章,对不起。非常感谢。你会考虑添加一个答案吗?
array([[ 0,  1],
       [ 4, -5],
       [ 2,  3]])
array([[ 0,  1],
       [ 4, -5],
       [ 2,  3]])