Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-强制nan值获得特定值_Python_Arrays_Numpy_Mask - Fatal编程技术网

Python-强制nan值获得特定值

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”获得某个值(每个示例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], [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
使用与此答案相同的布尔索引进行替换,以及对正无穷大和负无穷大进行替换。这是相当慢一点,可能是因为制作了一个副本。