【问题标题】:Convert specific value in numpy array to NAN将 numpy 数组中的特定值转换为 NAN
【发布时间】:2020-06-13 09:51:40
【问题描述】:

我有一个二维 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()

我知道有一些关于同一问题的问题,但我仍然没有设法解决它。

【问题讨论】:

  • 试试for i in range(6994): for j in range(6994):
  • np.nan 是一个浮点数。你的数组是整数。对于sklearn 使用哪个更有用?

标签: python arrays numpy scikit-learn na


【解决方案1】:

你仍然可以使用

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

您只需先将其转换为float

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

【讨论】:

  • 享受 float 1000.000000000001 != int 1000 的比较问题。
  • 公平点,但是转换将是float64,而不是float32,精度要好得多。
  • 完美,帮了大忙!!
  • mask 可以用原始的int dtype 数组计算。
【解决方案2】:

您可以使用 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.])

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 2017-03-15
    • 2020-09-18
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2021-09-21
    • 2019-06-08
    相关资源
    最近更新 更多