Преобразовать значение c в массиве numpy в NAN - PullRequest
1 голос
/ 29 февраля 2020

У меня есть двумерный массив numpy. Он имеет форму (6994, 6994). Есть много значений -1000, которые я хотел бы закодировать как NAN. Я пытался:

array[array == -1000] = np.NAN, но это дает мне ошибку cannot convert float NaN to integer

Когда я пытался написать функцию:

def valtona(array, val):
    for i in array:
        for j in array:
            if array[i,j] == -1000:
                array[i,j] = np.NAN

Я получаю: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Я знаю, что есть некоторые вопросы относительно той же проблемы, но мне все еще не удалось ее исправить.

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Вы можете использовать np.isclose () и установить параметры в соответствии с вашими потребностями, чтобы преодолеть сложность работы с плавающей точкой.

>>> a
array([ 0.,  1.,  2.,  4.,  4.,  5.,  6.,  7.,  8.,  9.])
>>> a[3]
4.0000000000001004
>>> a[4]
4.0
>>> np.isclose(a,[4.0], .00000001, .00000001)
array([False, False, False,  True,  True, False, False, False, False, False], dtype=bool)
>>> np.isclose(a,[4.0])
array([False, False, False,  True,  True, False, False, False, False, False], dtype=bool)
>>> a[np.isclose(a,[4.0], .00000001, .00000001)]=np.nan
>>> a
array([  0.,   1.,   2.,  nan,  nan,   5.,   6.,   7.,   8.,   9.])
1 голос
/ 29 февраля 2020

Вы все еще можете использовать

array[array == -1000] = np.NAN

Вам просто нужно сначала преобразовать его в float.

array=array.astype('float')
array[array == -1000] = np.NAN
...