You can use np.place to update in-situ -
np.place(arr,~np.in1d(arr,valid),0)
Run Example -
In [66]: arr Out[66]: array([[1, 2, 0], [2, 2, 0], [4, 1, 0], [4, 1, 0], [3, 2, 0]]) In [67]: np.place(arr,~np.in1d(arr,valid),0) In [68]: arr Out[68]: array([[1, 0, 0], [0, 0, 0], [4, 1, 0], [4, 1, 0], [0, 0, 0]])
At the same time, you can use np.put -
np.put(arr,np.where(~np.in1d(arr,valid))[0],0)
Run Example -
In [70]: arr Out[70]: array([[1, 2, 0], [2, 2, 0], [4, 1, 0], [4, 1, 0], [3, 2, 0]]) In [71]: np.put(arr,np.where(~np.in1d(arr,valid))[0],0) In [72]: arr Out[72]: array([[1, 0, 0], [0, 0, 0], [4, 1, 0], [4, 1, 0], [0, 0, 0]])