Пометьте max (sum) строки в массиве numpy в элемент списка, используя Python - PullRequest
0 голосов
/ 28 марта 2019

Для простоты я перечисляю в пронумерованном виде

1) У меня есть список с именами файлов

2) Я хотел бы извлечь запись из массива numpy, который имеетмаксимальная сумма строк по сравнению с другими записями (строками)

Пожалуйста, найдите скриншот ниже для справки

Я создал массив и нашел сумму с помощью np.sum.функция.Однако я не могу найти метод для извлечения строки на основе этого условия суммы.Я хотел бы иметь только конкретное значение строки и суммы, которые могут быть помечены для элемента в списке.Есть ли какая-нибудь элегантная функция python для этого?

t1 = ['abc_1.png','abc_2.png'] -- list with filenames as elements
arr_1 = np.random.rand(3,3)    -- array 1
arr_2 = np.random.rand(3,3)    -- array 2
arr1_sum = np.sum(arr_1,axis=1)
arr2_sum = np.sum(arr_2,axis=1)        -- the last two statement returns an array. I would like to extract the corresponding row/record which contributes to that sum and tag it to the first and second element in list (abc_1.png)

Ожидаемый вывод может быть в виде списка или словаря.Пример скриншота приведен ниже

enter image description here

Ответы [ 2 ]

1 голос
/ 28 марта 2019

вы ищете np.argmax :

max_row = arr_2[np.argmax(arr2_sum), :]

output = list(max_row)
output.append(np.max(arr2_sum))

output = {'abc_2.png' : output}
0 голосов
/ 28 марта 2019

Если вы хотите сделать это итеративно для списка файлов и массивов, вы можете:

files = ['abc_1.png','abc_2.png']

arr_1 = np.random.rand(3,3)
arr_2 = np.random.rand(3,3)

arrays = [arr_1, arr_2]

sums = [np.sum(arr, axis=1) for arr in arrays]

output_dict = {}

for i in range(len(files)):
    max_index = int(np.where(sums[i] == max(sums[i]))[0])
    output_dict[files[i]] = arrays[i][max_index]

И, как сказал @warped, вы можете использовать np.argmax (), чтобы отказаться от цикла for:

files = ['abc_1.png','abc_2.png']

arr_1 = np.random.rand(3,3)
arr_2 = np.random.rand(3,3)

arrays = [arr_1, arr_2]

sums = [np.sum(arr, axis=1) for arr in arrays]

output_dict = {files[i]: list(arrays[i][np.argmax(sums[i]), :]) for i in range(len(files))}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...