Как найти максимальное отрицательное и минимальное положительное число в массиве NumPy? - PullRequest
0 голосов
/ 20 апреля 2019

Мне дан массив, содержащий как положительные, так и отрицательные числа.

import numpy as np
arr = np.array([-10.2, -5.3, -2.1, 0, 1.2, 3.4])

Я хотел бы найти индекс, соответствующий максимальному отрицательному числу и минимальному положительному числу.В вышесказанном мой ожидаемый результат - 2 и 4.Есть ли какой-нибудь трюк numpy для достижения этой цели?Я нашел решение по этой ссылке, но мне хотелось бы узнать, как это можно сделать с помощью numpy функций: Нахождение индекса наибольшего отрицательного и наименьшего положительного элемента в массиве

Ответы [ 2 ]

4 голосов
/ 20 апреля 2019

Замените неотрицательные значения на -inf, затем используйте argmax, чтобы найти наибольшее отрицательное значение:

np.where(arr < 0, arr, -np.inf).argmax()
# 2

Аналогичным образом замените неположительные значения на inf, затем используйте argmin, чтобы найти наименьшее положительное значение:

np.where(arr > 0, arr, np.inf).argmin()
# 4
0 голосов
/ 20 апреля 2019

Если ваш массив всегда сортируется (как в приведенном примере), то:

# input
Out[66]: array([-10.2,  -5.3,  -2.1,   0. ,   1.2,   3.4])

# obtain a `signed` boolean mask 
In [75]: sign_mask = np.sign(arr)

# compute derivative and obtain index for max_negative element
In [76]: max_neg_idx = np.where(np.diff(sign_mask, append=1) == 1)[0][0]

# add +2 to that to get index for min_positive element
In [77]: min_pos_idx = max_neg_idx + 2
...