如何将数据值-3.4028231e + 38替换为numpy.nan

时间:2016-01-27 06:13:53

标签: python numpy raster

我有一个由光栅图像构建的二维数组。光栅图像没有分配给-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

输出为'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 个答案:

答案 0 :(得分:1)

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

#include <iostream>
#include <string>
using namespace std;

int main() {
    string name;
    char arr[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };

    bool found_a = false;
    bool found_b = false;
    bool found_c = false;

    for (int x = 0; x < 10; x++) {
        if( arr[x] == 'a' ) {
            found_a = true;
        } else if( arr[x] == 'b' ) {
            found_b = true;
        } else if( arr[x] == 'c' ) {
            found_c = true;
        }

        if(found_a == true && found_b == true && found_c == true) {
            cout << "Enter a name" << endl;
            cin >> name;
            if (name == "TEST") {
                for (int a = 0; a < 5; a++) {
                    cout << "TEST" << endl;
                }
            }
            break;
        }
    }
    system("pause");
    return 0;
}

答案 1 :(得分:0)

对于你的算法必须等于-3.40282306e + 38至关重要吗? 如果不尝试不等式而不是等于。 Equlaity适用于浮点数,如果它们是完美的整数,如0,对于像你使用不等式的数字可能是答案。不喜欢

  

( - 3.40282306e + 38-smallnumber)   修复你的问题? - 你必须在你的问题的背景下设置一些小的数字,我不知道它是什么。