【发布时间】:2020-06-05 20:03:12
【问题描述】:
让我们在 Anaconda Jupyter 中运行 Python3 NumPy 代码:
y = np.ma.array(np.matrix([[np.nan, 2.0]]), mask=[0, 1])
m = (y < 0.01)
我们收到警告:/.../anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:2: RuntimeWarning: invalid value encountered in less。
用1.0 等替换np.nan --- 没有警告。
为什么np.nan不能被屏蔽然后比较?
【问题讨论】:
-
但对于
m = (y != 0.01)(或==)y[m]是有效的;m = (y[~np.isnan(y)] < 0.01)无效 --- 形状已更改。 -
看
y。这是你想要的蒙面吗? -
使用
y = np.ma.array(np.matrix([[np.nan, 2.0]]), mask=[1, 0])和屏蔽m = (y < 0.01)我们有RuntimeWarning: invalid value encountered in less。更改为m = (y != 0.01)并添加print(y, y.shape) ; print(y[m], y[m].shape)我们得到预期:[[-- 2.0]] (1, 2)和[[-- 2.0]] (1, 2)。但是m = np.isnan(y) ; m &= (y[~m] < 0.01)给出了意想不到的print(y, y.shape) ; print(y[m], y[m].shape):[[-- 2.0]] (1, 2)和[] (1, 0)——形状改变了。
标签: python numpy compare nan masked-array