This question already has answers here:
What is the best way to compare floats for almost-equality in Python?
                                
                                    (14个回答)
                                
                        
                                4年前关闭。
            
                    
我有一个从光栅图像构造的二维数组。栅格图像没有为-3.4028231e + 38分配任何数据值,我试图用'nan'替换该值,但是当我对它应用条件运算符时找不到该值。

我的数据如下:

>>> slice22 = inndvi[0:2,0:2]
>>> slice22
array([[ -3.40282306e+38,  -3.40282306e+38],
       [ -3.40282306e+38,  -3.40282306e+38]], dtype=float32)


当我尝试在if语句中检查这些值时:

>>> if slice22[0][0] ==-3.40282306e+38:
...     print "yes"
... else:
...     print "no"
...
no


输出为“否”

由于这个原因,我不能将3.40282306e + 38分配给numpy.nan,如下所示:

slice22[slice22 == 3.40282306e+38] = numpy.nan


我还要提到的一件事是,我的数据集在栅格中从+2到-2。
我尝试使用该范围消除3.40282306e + 38的值,但仍然出现错误。

>>> slice22 [slice22 < 2 and slice22 >2 ]= np.nan
Runtime error
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

最佳答案

考虑到您知道实际值在-2到2之间,因此可以轻松过滤掉此范围以外的任何值。

a[(a < -2) | (a > 2)] = np.nan   #option 1
a[np.abs(a) > 2] = np.nan   #option 2
a[np.logical_or(a < -2, a > 2)] = np.nan   #option 3

关于python - 如何将无数据值-3.4028231e + 38替换为numpy.nan ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35030052/

10-12 23:42