У меня есть немного кода, который пытается найти содержимое массива по индексам, указанным другим, которые могут указывать индексы, выходящие за пределы диапазона предыдущего массива.
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
Так что мне нужно сначала заполнить маскированный массив, что раздражает, поскольку я не знаю, какое значение заполнения я мог бы использовать, чтобы не выбирать индексы для тех, которые находятся вне диапазона:
печать ввода [np.ma.filled (индексы, 0)]
[0 1 2 0]
Итак, мой вопрос: как эффективно использовать numpy для безопасного выбора индексов из массива, не выходя за границы входного массива?