изменить массив numpy, чтобы он возвращал `nan` за пределы? - PullRequest
5 голосов
/ 07 июня 2019

Есть ли способ создать массив, который возвращает np.nan при индексации за пределами?Например,

x = np.array([1,2,3])
x[1] # 2
x[-2] # np.nan
x[5] # np.nan

Самое близкое, что я нашел, было np.pad.

Я знаю, что мог бы написать класс-обертку, но мне было интересно, есть ли какой-нибудь эффективный способ сделать это.1008 *

Ответы [ 2 ]

1 голос
/ 07 июня 2019
In [360]: x = np.array([1,2,3])                                                                        
In [361]: x[1]                                                                                         
Out[361]: 2

np.take позволяет индексировать с помощью режима управления.По умолчанию выдается сообщение об ошибке, если индекс выходит за пределы (другие документы см. В документации):

In [363]: np.take(x,1)                                                                                 
Out[363]: 2
In [364]: np.take(x,-2)                                                                                
Out[364]: 2
In [365]: np.take(x,5)                                                                                 
----
IndexError: index 5 is out of bounds for size 3

Вы можете написать небольшую функцию, которая переносит это в try/except, возвращая np.nan в случае IndexError.

Имейте в виду, что np.nan - это число с плавающей запятой, в то время как ваш пример массива - целочисленный тип d.

0 голосов
/ 07 июня 2019

У вас есть много вариантов:

  • Просто вставьте попытку / кроме вашего кода.
  • Создайте класс, который наследуется от np.array, и переопределите оператор индексирования, чтобы реализовать поведение
  • написать простую функцию, которая делает попытку / исключая

Мне нравится первый класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...