Python numpy对每行排序并检索第k个元素

Python numpy对每行排序并检索第k个元素,python,numpy,sorting,Python,Numpy,Sorting,我试图从矩阵行中检索矩阵中所有行的第k个最大或最小元素。例如,如果k=3,那么我需要所有行中的第三个最大元素。在我从所有行中获取元素之后,我想对这个向量进行排序 到目前为止,我得到的是: dist = np.array([[0. , 2.7349432 , 3.57365027, 0.33696172, 1.40063669], [2.7349432 , 0. , 0.8692355 , 2.9937996 , 1.47642103], [

我试图从矩阵行中检索矩阵中所有行的第k个最大或最小元素。例如,如果k=3,那么我需要所有行中的第三个最大元素。在我从所有行中获取元素之后,我想对这个向量进行排序

到目前为止,我得到的是:

dist = np.array([[0.        , 2.7349432 , 3.57365027, 0.33696172, 1.40063669],
       [2.7349432 , 0.        , 0.8692355 , 2.9937996 , 1.47642103],
       [3.57365027, 0.8692355 , 0.        , 3.81469329, 2.27521406],
       [0.33696172, 2.9937996 , 3.81469329, 0.        , 1.62590145],
       [1.40063669, 1.47642103, 2.27521406, 1.62590145, 0.        ]])

neighbor_distance_argsort = np.argsort(dist, axis=1)
k_neighbor_dist = np.sort(dist[neighbor_distance_argsort == k - 1])
但是,我得到的顺序是错误的,并且选择了不正确的元素。 我知道argsort并不完全符合我的要求,也不符合我的想法。我在某个地方读到过,双argsort将产生值列,但我无法将我的解决方案调整到二维数组。
这里一定有一些简单的解决方案,我就是看不到。

您可以对行进行排序,然后选择第k-1列


最好

您可以对行进行排序,然后选择第k-1列


最好的方法是使用np.partition,因为实际上不需要对整个数组进行排序

def kth(dist, k):
    return np.sort(np.partition(dist, k-1, axis = 1)[:, k-1])

kth(dist, 3)
Out[]: array([ 1.40063669,  1.47642103,  1.47642103,  1.62590145,  2.27521406])

最简单的方法是使用np.partition,因为实际上不需要对整个数组进行排序

def kth(dist, k):
    return np.sort(np.partition(dist, k-1, axis = 1)[:, k-1])

kth(dist, 3)
Out[]: array([ 1.40063669,  1.47642103,  1.47642103,  1.62590145,  2.27521406])

给定样本的最终预期输出是什么?给定样本的最终预期输出是什么?感谢关于分区的提示,尽管速度与当前应用程序无关,但很高兴了解关于分区的提示的未来银行,尽管速度对于当前的应用程序来说并不是一个相关的问题,但对于未来的应用程序来说,了解速度是件好事