#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:
Вставка цикла по массиву, векторизация операции намного эффективнее.
Для этого вам нужно поиграть с аргументом 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]