【问题标题】:Replace nan with list comprehension用列表理解替换 nan
【发布时间】:2013-10-27 23:01:16
【问题描述】:
yu = np.array([np.nan, np.nan, np.nan, np.nan, np.nan,])

rte = np.array([1,2,3,4,5])

yu[0] = rte[0]
yu # array([  1.,  nan,  nan,  nan,  nan])

还是……

[yu[i] = rte[i] for i in range(len(rte))]

SyntaxError: 无效语法

具体来说,我正在尝试将 nan 填充到具有相同长度的其他数组的数组中:

[pred[first_c_rowNA, 0::][0::, wNA[0]][i] = output[i] for i in np.arange(len(output))]

SyntaxError: 无效语法

pred[first_c_rowNA, 0::][0::, wNA[0]] # array([ nan,  nan,  nan, ...,  nan,  nan,  nan])

output # array([ 0.,  0.,  0., ...,  0.,  0.,  0.]) # not all are zeros

谢谢

【问题讨论】:

  • 您可以使用np.nan_to_num(x),其中x 是替换nan 所需的数字...
  • 我不知道那个函数,但它似乎用零替换了 nan。并非输出数组的所有元素都是零。

标签: python numpy nan


【解决方案1】:

为什么不简单点:

>>> import numpy as np
>>> rte = np.array([1,2,3,4,5])
>>> yu = np.array([np.nan, np.nan, np.nan, np.nan, np.nan,])
>>> yu[:] = rte

>>> yu
array([ 1.,  2.,  3.,  4.,  5.])

或者如果你需要一个 nan 掩码:

yu[np.isnan(yu)] = values

例如:

>>> yu
array([ 0.20087116,         nan,  0.71742786,  0.05037165,  0.25646742,
               nan,  0.27702335,         nan,         nan,  0.62272575])

>>> yu[np.isnan(yu)] = np.random.rand(4)

>>> yu
array([ 0.20087116,  0.6701011 ,  0.71742786,  0.05037165,  0.25646742,
        0.63462273,  0.27702335,  0.01248758,  0.61178318,  0.62272575])

【讨论】:

    【解决方案2】:

    列表推导不分配任何东西,它会创建一个新列表,然后您可以使用它来填充一个 numpy 数组。但大多数时候使用numpy 数组时最好使用切片:

    >>> import numpy as np
    >>> yu = np.array([np.nan, np.nan, np.nan, np.nan, np.nan,])
    >>> rte = np.array([1,2,3,4,5])
    >>> yu[:] = rte
    >>> yu
    array([ 1.,  2.,  3.,  4.,  5.])
    

    【讨论】:

      【解决方案3】:

      你为什么不使用:

      for i in range(len(rte)):
          yu[i] = rte[i]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-16
        • 2012-02-16
        • 1970-01-01
        • 2018-12-22
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        相关资源
        最近更新 更多