Как получить индекс двумерного списка после нахождения максимального значения из элементов списка - PullRequest
1 голос
/ 14 октября 2019

У меня есть 2d список. где я нахожу максимальное значение, сравнивая a11 с b11 и c11 и так далее. Например,

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

Вывод выглядит так:

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

0 голосов
/ 15 октября 2019

Вот решение с использованием numpy's 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 это кажется в 10 раз быстрее, чем принятое решение. Я также думаю, что это более просто.

0 голосов
/ 14 октября 2019

Для ввода [[2,3,4,5], [3,4,1,6], [7,1,2,10]], если вы ищете индексы [7,4, 4, 10] (который в основном состоит из максимального значения соответствующих столбцов 2D-массива), что можно сделать следующим образом:

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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...