Вернуть наибольшее значение меньше единицы из простого вектора - PullRequest
0 голосов
/ 18 мая 2018

У меня есть пустой вектор в python, и я хочу найти индекс максимального значения вектора с условием, что он меньше единицы.В качестве примера я приведу следующее:

temp_res = [0.9, 0.8, 0.7, 0.99, 1.2, 1.5, 0.1, 0.5, 0.1, 0.01, 0.12, 0.56, 0.89, 0.23, 0.56, 0.78]
temp_res = np.asarray(temp_res)
indices = np.where((temp_res == temp_res.max()) & (temp_res < 1))

Однако то, что я пробовал, всегда возвращает пустую матрицу, поскольку эти два условия не могут быть выполнены.HU хотят вернуть в качестве конечного результата индекс = 3, который соответствует 0,99 наибольшему значению, которое меньше 1. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вам необходимо выполнить функцию max() после фильтрации массива:

temp_res = np.asarray(temp_res)
temp_res[temp_res < 1].max()

Out[60]: 0.99

Если вы хотите найти все индексы, вот более общий подход:

mask = temp_res < 1
indices = np.where(mask)
maximum = temp_res[mask].max()
max_indices = np.where(temp_res == maximum)

Пример:

...: temp_res = [0.9, 0.8, 0.7, 1, 0.99, 0.99, 1.2, 1.5, 0.1, 0.5, 0.1, 0.01, 0.12, 0.56, 0.89, 0.23, 0.56, 0.78]
...: temp_res = np.asarray(temp_res)
...: mask = temp_res < 1
...: indices = np.where(mask)
...: maximum = temp_res[mask].max()
...: max_indices = np.where(temp_res == maximum)
...: 

In [72]: max_indices
Out[72]: (array([4, 5]),)
0 голосов
/ 18 мая 2018

Вы можете использовать:

np.where(temp_res == temp_res[temp_res < 1].max())[0]

Пример:

In [49]: temp_res
Out[49]: 
array([0.9 , 0.8 , 0.7 , 0.99, 1.2 , 1.5 , 0.1 , 0.5 , 0.1 , 0.01, 0.12,
       0.56, 0.89, 0.23, 0.56, 0.78])

In [50]: np.where(temp_res == temp_res[temp_res < 1].max())[0]
    ...: 
Out[50]: array([3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...