【发布时间】:2018-01-16 01:43:43
【问题描述】:
我不确定这个问题的标题应该是什么。但是假设我们有 2 个数组、值和距离。
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]
【问题讨论】:
标签: python arrays sorting numpy