Не поймите, почему люди делают это настолько сложным:
objs.sort(function(a, b){
return a.last_nom > b.last_nom;
});
Для более строгих движков:
objs.sort(function(a, b){
return a.last_nom == b.last_nom ? 0 : +(a.last_nom > b.last_nom) || -1;
});
Смените оператор, чтобы он отсортировался по обратному алфавитному порядку.
Вы также можете использовать argmax
с unravel_index
:
def max_by_index(idx, arr):
return (idx,) + np.unravel_index(np.argmax(arr[idx]), arr.shape[1:])
, например
import numpy as np
a = np.array([[[ 0.25, 0.10 , 0.50 , 0.15],
[ 0.50, 0.60 , 0.70 , 0.30]],
[[ 0.25, 0.50 , 0.20 , 0.70],
[ 0.80, 0.10 , 0.50 , 0.15]]])
def max_by_index(idx, arr):
return (idx,) + np.unravel_index(np.argmax(arr[idx]), arr.shape[1:])
print(max_by_index(0, a))
дает
(0, 1, 2)
col = (np.argmax(a[i])) % (a[i].shape[1])
row = (np.argmax(a[i])) // (a[i].shape[1])
Это также помогло
Вы можете использовать numpy.where
, который вы можете обернуть в простой функции, соответствующей вашим требованиям:
def max_by_index(idx, arr):
return np.where(arr[idx] == np.max(arr[idx]))
В действии:
>>> max_by_index(0, a)
(array([1], dtype=int64), array([2], dtype=int64))
Вы можете индексировать свой массив с этим результатом для доступа к максимальному значению:
>>> a[0][max_by_index(0, a)]
array([0.7])
Это вернет все местоположения максимального значения, если вам нужен только один вы можете заменить np.max
на np.argmax
.