Как получить значение numpy ndarray в index или NaN для IndexError? - PullRequest
0 голосов
/ 15 февраля 2019

Мой вопрос похож на этот

Получить значение по списку / индексу массива или "Нет", если вне диапазона в Python

, но я хочу использоватьмногомерный массив NumPy.

Можно ли это сделать без предварительной проверки индексов?

data = np.ones((2,3,4))
idx1 = [0,1]
idx2 = [1,2]
idx3 = [0, 100]
data[idx1, idx2, idx3]

Желаемый вывод:

array([1., np.nan])

1 Ответ

0 голосов
/ 15 февраля 2019

С учетом наших данных

import numpy as np    
data = np.ones((2,3,4))
idx = [[0,1], [1,2], [0, 100]]
shape = np.array(data.shape)

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

invalids = np.any(idx > shape[:, None] - 1, axis=0)

, и обрезать ваши индексы до допустимых значений, используя

* 1008.*

эти признаки могут использоваться для индексации нашего массива

out = data[valids.tolist()]

, а маска недопустимых индексов может использоваться для установки выбросов на nan

out[invalids] = np.nan
# array([ 1., nan])
...