Python 如何用NAN值替换每列中的不同值?

Python 如何用NAN值替换每列中的不同值?,python,arrays,numpy,Python,Arrays,Numpy,请让我知道,如果有人知道一个更好的方法来做以下。 我正在尝试替换numpy数组中的一些值。 每列中的替换条件不同。 假设我有一个numpy数组和nodata值列表,如: import numpy as np array = np.array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [10,11,12]]) nodata_values = [4, 8, 3]

请让我知道,如果有人知道一个更好的方法来做以下。 我正在尝试替换numpy数组中的一些值。 每列中的替换条件不同。 假设我有一个numpy数组和nodata值列表,如:

import numpy as np
array = np.array([[ 1, 2, 3],
                  [ 4, 5, 6],
                  [ 7, 8, 9],
                  [10,11,12]])
nodata_values = [4, 8, 3]
我想要的是一个数组,它的值被替换为

array([[ 1.,  2., nan],
       [nan,  5.,  6.],
       [ 7., nan,  9.],
       [10., 11., 12.]])
我知道我能做到:

np.array([np.where(i == nodata_values[idx], np.nan, i) 
          for idx, i in enumerate(array.T)]).T
但是这段代码使用for-loop-inside,因此将其应用于具有上万行的表将需要时间。

用于创建布尔索引和广播

为避免
ValueError:无法将浮点NaN转换为整数

import numpy as np

array = array.astype(np.float)

array[np.isin(array , nodata_values)] = np.NaN


nan
是浮点值,因此只有当
dtype
是浮点类型时,数组才能包含它。这是否回答了您的问题@KarlKnechtel,谢谢你的评论,我知道这一点,我不介意浮动格式。因为我想要np.nan值。
mask=(数组==4)| |(数组==8)| |(数组==3);array[mask]=np.nan
@jakub,我希望替换条件的每一列都有不同的值。
[[ 1.  2. nan]
 [nan  5.  6.]
 [ 7. nan  9.]
 [10. 11. 12.]]