我不知道这个问题的题目应该是什么。但是假设我们有两个数组,值和距离
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]
“一行”:
重复
np.where(values >= 0)
是低效的,如果values
很大,可能会产生一个变量试试^{}
相关问题 更多 >
编程相关推荐