как индексировать элементы вектора Numpy

Как с высокой скоростью (если например количество элементов будет 10**9) за одно выражение выбрать элементы вектора 'a' со значениями больше 'a_min', меньше 'a_max', но не выводить элементы под номерами 'idx'. Например

a = np.arange(20)
a_min = 5
a_max = 15
idx = [6, 7, 9, 12]
res_ind = np.where((a > a_min) & (a < a_max) & (a != a[idx]))

Третье условие 'a != a[idx]' не корректно.


Ответы (1 шт):

Автор решения: Кирилл Малышев

Можно вопспользоваться маскированными массивами

import numpy as np

a = np.arange(20)
a_min = 5
a_max = 15
idx = [6, 7, 9, 12]
masked_a = np.ma.array(a, mask=False)
masked_a.mask[idx] = True
print(np.ma.where(np.logical_and(masked_a > a_min, masked_a < a_max)))

Будет напечатано:

(array([ 8, 10, 11, 13, 14]),)

https://www.online-python.com/Q9oyeXGbvD

→ Ссылка