修改numpy数组以返回nan越界吗?

时间:2019-06-07 11:54:16

标签: python numpy

总有没有建立一个numpy数组,当索引超出范围时会返回np.nan?例如

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

我发现最接近的东西是np.pad

我知道我可以编写一个包装器类,但是我想知道是否有任何有效的numpy方法来实现它。

2 个答案:

答案 0 :(得分:1)

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是浮点数,而示例数组是整数dtype。

答案 1 :(得分:-1)

您有很多选择:

  • 只需在代码中插入try / except。
  • 创建一个从np.array继承的类并重新定义索引运算符以实现该行为
  • 编写一个执行try / except的简单函数

我喜欢一堂课。