繁体   English   中英

从列表项中找到最大值后如何获取二维列表的索引

[英]How to get index of 2d list after finding maximum value from list items

我有一个二维列表。 我通过将 a11 与 b11 和 c11 等进行比较来找到最大值。 例如,

[[2,3,4,5],[3,4,1,6],[7,1,2,10]]

output 是这样的:

[[7,4,4,10]]

现在我希望每个最大值的索引为: [[c11,b12,a13,c14]]

我的原始代码是:

img = [cv2.imread(file,0) for file in glob.glob("resized/*.jpg")]
X=[]
for im in img:
    arr = np.asarray(im)
    arr = np.split(arr, 20)
    arr = np.array([np.split(x, 20, 1) for x in arr])
    mat = [arr[i][j].mean() for i in range(20) for j in range(20)]
    X.append(mat)

a = max(X, key=lambda item: item[0])

对于 [[2,3,4,5],[3,4,1,6],[7,1,2,10]] 的输入,如果您正在寻找 [7, 4, 4 , 10](基本上由二维数组的相应列的最大值组成),可以这样完成:

a = [[2,3,4,5],[3,4,1,6],[7,1,2,10]]
tr_a = list(zip(*a))
result = [(row.index(max(row)),index) for index, row in enumerate(tr_a)]
print(result)

执行:

>>> a = [[2,3,4,5],[3,4,1,6],[7,1,2,10]]
>>> tr_a = list(zip(*a))
>>> result = [(row.index(max(row)),index) for index, row in enumerate(tr_a)]
>>> print(result)
[(2, 0), (1, 1), (0, 2), (2, 3)]

这是使用 numpy 的argmax()的解决方案。

import numpy as np
import itertools as itt

def get_col_max_inds(arr):
    return list(zip(np.argmax(arr, axis=0), itt.count()))

在 numpy arrays 上,它似乎比公认的解决方案快 10 倍。 我也认为它更直接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM