如何根据多个条件设置numpy数组中的nan值
我有一个包含一些数值的numpy数组。我想让值为2、3和7的点保持不变,而其他的值都变成nan。
原始的numpy数组看起来是这样的:
[[0, 7, 2, ..., 1, 6, 0],
[5, 3, 0, ..., 2, 5, 0],
...,
[8, 2, 0, ..., 1, 0, 7],
[0, 3, 2, ..., 0, 2, 0],
[7, 1, 0, ..., 0, 7, 0]],
我期望的结果是:
[[nan, 7, 2, ..., nan, nan, nan],
[nan, 3, nan, ..., 2, nan, nan],
...,
[nan, 2, nan, ..., nan, nan, 7],
[nan, 3, 2, ..., nan, 2, nan],
[7, nan, nan, ..., nan, 7, nan]],
1 个回答
1
a = np.array([[0, 7, 2, 1, 6, 0],
[5, 3, 0, 2, 5, 0],
[8, 2, 0, 1, 0, 7],
[0, 3, 2, 0, 2, 0],
[7, 1, 0, 0, 7, 0]],)
out = np.where(np.isin(a, [2, 3, 7]), a, np.nan)
如果 a
是浮点数类型,你也可以直接在原地修改:
a = np.array([[0, 7, 2, 1, 6, 0],
[5, 3, 0, 2, 5, 0],
[8, 2, 0, 1, 0, 7],
[0, 3, 2, 0, 2, 0],
[7, 1, 0, 0, 7, 0]], dtype=float)
a[~np.isin(a, [2, 3, 7])] = np.nan
输出结果:
array([[nan, 7., 2., nan, nan, nan],
[nan, 3., nan, 2., nan, nan],
[nan, 2., nan, nan, nan, 7.],
[nan, 3., 2., nan, 2., nan],
[ 7., nan, nan, nan, 7., nan]])