通过元素上的条件值对numpy数组元素进行排序

时间:2016-12-05 22:31:58

标签: python arrays sorting proximity

我需要通过增加距离另一个点的距离来排列一个numpy点阵。

import numpy as np

def dist(i,j,ip,jp): 
    return np.sqrt((i-ip)**2+(j-jp)**2)

arr = np.array([[0,0],[1,2],[4,1]])

我想做的是在固定点[i,j] = [1,1]和arr中的每个有序对[ip,jp]之间使用函数dist(1,1,ip,jp)来返回arr,每个元素从[i,j]的最低到最高接近排序。有人有快速的解决方案吗?

我想要的输出是new_arr = np.array([[1,2],[0,0],[4,1]])

我有一些想法,但看起来非常低效。

谢谢!

1 个答案:

答案 0 :(得分:1)

似乎有两种方法可以做到这一点:

  1. 将整个numpy数组转换为Python列表,并使用Python的排序方法和关键函数对其进行排序。

    l = list(arr)
    l.sort(key=lambda coord: dist(1, 1, coord[0], coord[1]))
    arr = np.array(l)
    
  2. 在原始数组上创建第二个numpy数组my dist(),使用.argsort()获取排序顺序,然后将其应用于原始数组。

    arr2 = np.vectorize(lambda coord: dist(1, 1, coord[0], coord[1]))(arr)
    arr3 = np.argsort(arr2)
    arr = np.array(arr)[arr3]