给定距离和值数组,返回numpy中已排序的筛选值

2024-05-29 03:08:10 发布

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

我不知道这个问题的题目应该是什么。但是假设我们有两个数组,值和距离

values = np.array([[-1,-1,-1],
                   [1, 2, 0],
                   [-1,-1,-1]])

distances = np.array([[1,2,3],
                      [6,5,4],
                      [7,8,9]])

我想得到非负的值,并根据距离数组按相应的距离排列

在上面的例子中,正值是[1,2,0],距离是[6,5,4]。因此,如果按其相应的距离排序,我想用[0,2,1]作为答案

我的代码在下面。它的工作,但希望有一个解决方案,只是使用numpy。我相信这会比这更有效:

import numpy as np   
import heapq

def get_sorted_values(seek_val, values, distances):
    r, c = np.where(values >= seek_val)

    di = distances[r, c]
    vals = values[r, c]

    print("di", di)
    print("vals", vals)

    if len(di) >= 1:

        heap = []
        for d, v in zip(di,vals):
            heapq.heappush(heap, (d,v))

        lists = []
        while heap:
            d, v = heapq.heappop(heap)
            lists.append(v)

        return lists

    else:
        ## NOTHING FOUND
        return None

输入:

seek_val = 0
values = np.array([[-1,-1,-1],
                   [1,2,0],
                   [-1,-1,-1]])
distances = np.array([[1,2,3],
                      [6,5,4],
                      [7,8,9]])

print("Ans:",get_sorted_values(seek_val, values, distances))

输出:

di [6 5 4]
vals [1 2 0]
Ans: [0, 2, 1]

Tags: numpy距离npseekval数组arraylists
2条回答

“一行”:

values[np.where(values >= 0)][np.argsort(distances[np.where(values >= 0)])]  

Out[981]: array([0, 2, 1])  

重复np.where(values >= 0)是低效的,如果values很大,可能会产生一个变量

v_indx = np.where(values >= 0)
values[v_indx][np.argsort(distances[v_indx])]

试试^{}

import numpy as np
values = np.array([[-1,-1,-1],
                   [ 1, 2, 0],
                   [-1,-1,-1]])
distances = np.array([[1, 2, 3],
                      [6, 5, 4],
                      [7, 8, 9]])
print(values[values >= 0])
# [1 2 0]
print(distances[values >= 0])
# [6 5 4]
print('Ans:', values[values >= 0][np.argsort(distances[values >= 0])])
# Ans: [0 2 1]

相关问题 更多 >

    热门问题