查找嵌套列表的最小值最大值并使用索引返回其他嵌套列表中的相应值

时间:2021-04-20 22:30:06

标签: python numpy

我有两个嵌套的数字列表 var1var2

var1 = [[1, 2206], [578, 619]]
var2 = [[122498, 124673], [101182, 101223]]

我想从 var1 中找到最高和最低值,并使用这些值的索引从 var 2、122498124673 中的相同索引返回值。

到目前为止,我已经使用

找到了 var1 中最高和最低值的位置
var1a = np.array(var1)
var1maxloc = str(np.unravel_index(np.argmax(var1a), var1a.shape))
var1minloc = str(np.unravel_index(np.argmin(var1a), var1a.shape))

但是我不确定如何进行

我操作了输出,所以列表中的索引是一样的,但不知道如何使用

var1minloc.replace(")", "]").replace(", ", "][").replace("(", "[")
var1maxloc.replace(")", "]").replace(", ", "][").replace("(", "[")

3 个答案:

答案 0 :(得分:1)

你很接近,但不需要对字符串做任何事情:

>>> var1 = np.array([[1, 2206], [578, 619]])
>>> var2 = np.array([[122498, 124673], [101182, 101223]])
>>> min_idx = np.unravel_index(np.argmin(var1), var1.shape)
>>> max_idx = np.unravel_index(np.argmax(var1), var1.shape)
>>> var2[min_idx]
122498
>>> var2[max_idx]
124673

答案 1 :(得分:0)

一种选择是在计算最小/最大索引并检索值之前展平两个数组,假设两个数组始终具有相同的形状:

min_max = [np.argmin(var1.ravel()), np.argmax(var1.ravel())]
var2.ravel()[min_max]    
# [122498 124673]

答案 2 :(得分:0)

如果你想用布尔掩码来做:

var1 = np.array([[1, 2206], [578, 619]])
var2 = np.array([[122498, 124673], [101182, 101223]])

mask = np.logical_or(var1 == np.min(var1), var1 == np.max(var1))
var2[mask]

输出:

array([122498, 124673])