Присвоите элементу списка значение max (sum) строки в массиве numpy с помощью Python

#python #python-3.x #list #numpy #matrix

#python #python-3.x #Список #numpy #матрица

Вопрос:

Чтобы упростить, я перечисляю в пронумерованной форме

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)
  

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

введите описание изображения здесь

Ответ №1:

вы ищете 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}
  

Ответ №2:

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

 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))}