I have numpy array with some values.I want the points with value 2,3 and 7 will remain same but others value will be nan.
original nympy array looks like this
[[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]],
my expected result is
[[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]],
>Solution :
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)
If a had a float dtype, you can also modify in place:
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
Output:
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]])