Python Numpy:按键排序函数
有没有一种方法可以使用key(或comparator)函数对numpy ndarray的行进行排序,而不必转换为python列表 特别是,我需要根据此函数进行排序: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
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]])