【问题标题】:zero values to nan values in an array of PythonPython数组中的零值到nan值
【发布时间】:2014-12-30 14:47:59
【问题描述】:

我有一个包含一些零值的数组,我希望将其转换为 nan 值。当我应用代码时
所有的值都变成了 nan

myarray
array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       ..., 
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.]])

myarray.shape
(64L, 52L)
myarray.max()
4563.666015625
myarray.min()
0.0

我希望在 nan 中转换零值。我使用来自stackoverflow的示例

a = np.arange(3.0)
a
array([ 0.,  1.,  2.])
a[a==0] = np.nan
a
array([ nan,   1.,   2.])

当我将示例应用到我的数组时,所有值都变成了 nan

myarray[myarray == 0.] = nan
myarray
array([[ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       ..., 
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan]])

myarray.max()
nan
myarray.min()
nan

【问题讨论】:

    标签: python arrays nan


    【解决方案1】:

    并不是所有的值都变成nan,而是(1)你只看那些做的部分,(2)minmax不能很好地与nan一起工作秒。

    例如,如果我们制作一个类似于您的数组:

    >>> myarray = np.zeros((64, 52))
    >>> myarray[3:-3,3:-3] = np.random.uniform(0, 5000, (64-6,52-6))
    >>> myarray
    array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           ..., 
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.]])
    >>> myarray[myarray==0] = np.nan
    >>> myarray
    array([[ nan,  nan,  nan, ...,  nan,  nan,  nan],
           [ nan,  nan,  nan, ...,  nan,  nan,  nan],
           [ nan,  nan,  nan, ...,  nan,  nan,  nan],
           ..., 
           [ nan,  nan,  nan, ...,  nan,  nan,  nan],
           [ nan,  nan,  nan, ...,  nan,  nan,  nan],
           [ nan,  nan,  nan, ...,  nan,  nan,  nan]])
    

    它可能看起来都是nan,但实际上并非如此:

    >>> myarray[2:5, 2:5]
    array([[           nan,            nan,            nan],
           [           nan,  1500.05326562,  4583.70521213],
           [           nan,  4896.62420284,   892.83210033]])
    

    你也可以使用nanminnanmax,忽略nans:

    >>> myarray.min()
    nan
    >>> myarray.max()
    nan
    >>> np.nanmin(myarray)
    0.60474162939361253
    >>> np.nanmax(myarray)
    4996.8967777356092
    

    【讨论】:

    • 感谢@DSM。是否可以使用 np.nan 计算标准偏差和模式?
    • nanstd;不过,我认为没有nanmode。不过,您始终可以在删除非 nan 值后手动计算它们的模式 (myarray[~np.isnan(myarray)])。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2023-03-26
    • 2016-04-06
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多