[英]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.