根据元素的条件值对numpy数组元素排序

2024-05-18 23:07:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要通过增加与另一个点的距离来对一个点数组进行排序。在

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]])

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

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

我有一些想法,但看起来效率低下。在

谢谢!在


Tags: importipnumpy距离return排序distdef
1条回答
网友
1楼 · 发布于 2024-05-18 23:07:45

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

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

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

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

相关问题 更多 >

    热门问题