Python-强制nan值获得特定值
我使用了一个掩码来处理数组,现在我想强制“nan”获得某个值(每个示例0…) 一个简单的中等数组示例,我有:Python-强制nan值获得特定值,python,arrays,numpy,mask,Python,Arrays,Numpy,Mask,我使用了一个掩码来处理数组,现在我想强制“nan”获得某个值(每个示例0…) 一个简单的中等数组示例,我有: [[[nan, nan], [nan, nan], [nan, nan], [nan, nan]], [[2, 0], [2, 2], [nan, nan], [nan, nan]], [[2, 2], [2, 0], [2, 1], [2, 2]]] 我想得到一个数组,如下所示: [[0, 0], [0, 0], [0, 0], [0, 0]], [[2, 0], [2, 2], [
[[[nan, nan], [nan, nan], [nan, nan], [nan, nan]], [[2, 0], [2, 2], [nan, nan], [nan, nan]], [[2, 2], [2, 0], [2, 1], [2, 2]]]
我想得到一个数组,如下所示:
[[0, 0], [0, 0], [0, 0], [0, 0]], [[2, 0], [2, 2], [0, 0], [0, 0]], [[2, 2], [2, 0], [2, 1], [2, 2]]]
这可以通过以下方式轻松实现:
请注意,这将创建一个新阵列,不会改变原有阵列。这可以通过以下方式轻松实现:
请注意,这将创建一个新数组,它不会改变原来的数组。使用布尔索引,并在赋值的左侧使用
numpy.isnan
>>> a
array([[[ nan, nan],
[ nan, nan]],
[[ 2., 0.],
[ nan, nan]],
[[ 2., 2.],
[ 2., 0.]]])
>>> a[np.isnan(a)] = 0
>>> a
array([[[ 0., 0.],
[ 0., 0.]],
[[ 2., 0.],
[ 0., 0.]],
[[ 2., 2.],
[ 2., 0.]]])
>>>
将布尔索引与赋值左侧的
numpy.isnan
一起使用
>>> a
array([[[ nan, nan],
[ nan, nan]],
[[ 2., 0.],
[ nan, nan]],
[[ 2., 2.],
[ 2., 0.]]])
>>> a[np.isnan(a)] = 0
>>> a
array([[[ 0., 0.],
[ 0., 0.]],
[[ 2., 0.],
[ 0., 0.]],
[[ 2., 2.],
[ 2., 0.]]])
>>>
这个答案的优点是适用于除零以外的值,而我的答案不是。我在源代码中找到了另一个,
np.copyto(a,0,其中=np.isnan(a))
——它在时间上似乎与布尔索引相当。nan_to_num
使用与此答案相同的布尔索引进行替换,以及正无穷和负无穷的替换。这可能是因为制作了一个副本,所以速度会慢一些。这个答案的优点是可以适应除零以外的值,而我的答案不是。我在查看源代码时发现了另一个,np.copyto(a,0,其中=np.isnan(a))
-在时间上似乎与布尔索引相当。nan_to_num
使用与此答案相同的布尔索引进行替换,以及对正无穷大和负无穷大进行替换。这是相当慢一点,可能是因为制作了一个副本。