我有一个数组
a = np.array([1,2,3,4,np.nan])
我想用np.nan
替换小于1.5的任何内容,即我希望
a = np.array([np.nan,2,3,4,np.nan])
我该怎么做?
我做了
a[a<1.5] = np.nan
我在IPython(Py3.4)RuntimeWarning: invalid value encountered in less
中遇到以下运行时警告错误。这是因为我的名单有np.nan
吗?有什么办法可以防止这种情况发生吗?
还有一种方法可以在没有分配的情况下进行此内联吗?而不是做
a[a<1.5]=np.nan
return a
我可以做到
return a...
这里......需要填写。
答案 0 :(得分:3)
这是[
RuntimeWarning
],因为我的列表有np.nan吗?
是
我能做些什么来阻止这种情况吗?
在您的情况下,可以安全地忽略此警告。因此,您不会意外地抑制不相关的警告,请除了显示的一行之外,不要在上下文管理器中放置任何其他内容。
>>> import numpy as np
>>> a = np.array([1,2,3,4,np.nan])
>>> with np.errstate(invalid='ignore'):
... a[a<1.5] = np.nan
...
>>> a
array([ nan, 2., 3., 4., nan])
此操作就地,此处不会创建副本。要返回原始a
未修改的副本,请更喜欢masked array approach。
答案 1 :(得分:1)
另一个可以根据需要转到return语句的选项:
mask = ~np.isnan(a)
mask[mask] &= a[mask] < 1.5
return np.where(mask, np.nan, a)
示例:
def ma_lessthan(arr, num):
mask = ~np.isnan(arr)
mask[mask] &= arr[mask] < num
return np.where(mask, np.nan, arr)
print(ma_lessthan(a, 1.5))
[ nan 2. 3. 4. nan]
mask
信用到:@Jaime。