Индексирование с помощью маскированных массивов в numpy

У меня есть фрагмент кода, который пытается найти содержимое массива по индексам, указанным другим, который может указывать индексы, выходящие за пределы диапазона предыдущего массива.

input = np.arange(0, 5)
indices = np.array([0, 1, 2, 99])

Я хочу сделать следующее: этот: ввод для печати [индексы] и получить [0 1 2]

Но это дает исключение (как и ожидалось):

IndexError: index 99 out of bounds 0<=index<5

Итак, я подумал, что могу использовать замаскированные массивы, чтобы скрыть индексы за пределами границ:

indices = np.ma.masked_greater_equal(indices, 5)

Но все же:

>print input[indices]
IndexError: index 99 out of bounds 0<=index<5

Хотя:

>np.max(indices)
2

Поэтому мне нужно сначала заполнить замаскированный массив, что меня раздражает, поскольку я не знаю, какое значение заполнения я мог бы использовать, чтобы не выбирать какие-либо индексы для тех, которые находятся вне диапазона:

print input [np .ma.filled (index, 0)]

[0 1 2 0]

Итак, мой вопрос: как можно эффективно использовать numpy для безопасного выбора индексов из массива, не выходя за границы входного массива?

6
задан Jonathan Leffler 4 February 2015 в 15:36
поделиться