Как сохранить наибольшее значение для каждой строки в списке списков python

#python #numpy

#python #numpy

Вопрос:

У меня есть список списков следующим образом

 array([[9.88945457e-01, 1.12012004e-11, 1.10545428e-02],
       [3.19212970e-03, 9.60482604e-01, 3.63252661e-02],
       [9.97873928e-01, 1.10315885e-12, 2.12607185e-03],
       [5.13391890e-07, 9.84294588e-01, 1.57048982e-02]])
 

Я хотел бы сохранить наибольшее значение в каждой строке, например

 array([[9.88945457e-01],
       [9.60482604e-01],
       [9.97873928e-01],
       [9.84294588e-01]])
 

Требуется ли для этого цикл для прохождения каждой строки? Или это что-то enumerate() или iterrows() может справиться?

Комментарии:

1. arr.max(axis=1)

Ответ №1:

Вставка цикла по массиву, векторизация операции намного эффективнее.

Для этого вам нужно поиграть с аргументом axis функции max . В этом случае вы должны использовать axis=1 .

 import numpy as np


a = np.array([[9.88945457e-01, 1.12012004e-11, 1.10545428e-02],
              [3.19212970e-03, 9.60482604e-01, 3.63252661e-02],
              [9.97873928e-01, 1.10315885e-12, 2.12607185e-03],
              [5.13391890e-07, 9.84294588e-01, 1.57048982e-02]])
print(np.max(a, axis=1))
 

Ответ №2:

Если это массив numpy

 myarray.max(axis=1)
 

Ответ №3:

чтобы узнать наибольшее число, вы можете сделать это следующим образом:

 def largest(arr,n): 

# Initialize maximum element 
max = arr[0] 

# Traverse array elements from second 
# and compare every element with  
# current max 
for i in range(1, n): 
    if arr[i] > max: 
        max = arr[i] 
return max


# Driver Code 
arr = [10, 324, 45, 90, 9808] 
n = len(arr) 
Ans = largest(arr,n) 
print ("Largest in given array is",Ans) 
 

Комментарии:

1. Это похоже на ответ C, написанный на Python. Плюс вкладки отсутствуют. Вы новичок, но вам следует заглянуть в справку для ввода ответа, там будет объяснено, как лучше отформатировать ваш код. (Отступ имеет решающее значение в Python)

2. да, вы правы, это ответ на c в python… но это работает ^^ так что он просто хотел получить результат, я думаю. И да, конечно, отступ в этом коде не идеален. Код функции нуждался в «вкладке» больше

Ответ №4:

Вы используете numpy, но в обычном python это просто:

 maxes = [max(x) for x in numlists]  
 

или

 maxes = list(map(max,numlists))
 

Ответ №5:

Имея этот массив:

 array = np.array([[9.88945457e-01, 1.12012004e-11, 1.10545428e-02],
       ...        [3.19212970e-03, 9.60482604e-01, 3.63252661e-02],
       ...        [9.97873928e-01, 1.10315885e-12, 2.12607185e-03],
       ...        [5.13391890e-07, 9.84294588e-01, 1.57048982e-02]])
 

Если ваш массив довольно большой, лучше использовать (как предложено @Guillem или @Muhammad) функцию max numpy .

Пожалуйста, обратите внимание, что функция max numpy вернет массив numpy

 np.max(a, axis=1)
>>> array([0.98894546, 0.9604826 , 0.99787393, 0.98429459])
 

Тем не менее, я думаю, что вы можете достичь той же цели в python, используя цикл для массива, а затем использовать функцию max() .

Что-то вроде этого:

 array = np.array([[9.88945457e-01, 1.12012004e-11, 1.10545428e-02],
      ...        [3.19212970e-03, 9.60482604e-01, 3.63252661e-02],
      ...        [9.97873928e-01, 1.10315885e-12, 2.12607185e-03],
      ...        [5.13391890e-07, 9.84294588e-01, 1.57048982e-02]])

res = []
for sub_list in array:
    max_value = max(sub_list)
    res.append([max_value])
 

Этот метод вернет стандартный список python

Ответ №6:

numpy.argmax получает индекс максимального значения каждой строки
, преобразует одномерные данные в двумерные

 getArrayMax = lambda array: array[range(array.shape[0]), numpy.argmax(array, axis=1)].reshape(array.shape[0], 1)

>>> getArrayMax(f)
array([[0.98894546],
       [0.9604826 ],
       [0.99787393],
       [0.98429459]])


 

Ответ №7:

используйте понимание списка с максимальным

  arr=np.array([[9.88945457e-01, 1.12012004e-11, 1.10545428e-02],
   [3.19212970e-03, 9.60482604e-01, 3.63252661e-02],
   [9.97873928e-01, 1.10315885e-12, 2.12607185e-03],
   [5.13391890e-07, 9.84294588e-01, 1.57048982e-02]])

 result=[max(item)  for item in arr]
 print(result)
 

вывод:

  [0.988945457, 0.960482604, 0.997873928, 0.984294588]