【问题标题】:Python: change numpy array with NaNs to array with numbers and '--'Python:将带有 NaN 的 numpy 数组更改为带有数字和“--”的数组
【发布时间】:2013-06-04 11:52:47
【问题描述】:

我有一个带有一些浮点数和一些 nan 的 numpy 数组:

a = [ 8.08970226  nan  nan  8.30043545  nan  nan   nan  nan]

我想把它转换成一个数组(用于在 Latex 中打印)为混合形式:

a = ['8.08970226', '--', '--', '8.30043545', '--', '--', '--', '--']

我摸索出来的方法,不太优雅,是:

a=a.astype('|S10')
a[a=='nan']='--'
a=list(a)

有没有更优雅的方式来完成这项工作? (对于我的 Latex 要求,我可能会停在第二行。)

建议

【问题讨论】:

    标签: python arrays numpy nan


    【解决方案1】:

    使用numpymasked arrays

    >>> import numpy as np
    >>> a = np.array([ 8.08970226,  np.NAN,  np.NAN,  8.30043545,  np.NAN,  np.NAN,   np.NAN,  np.NAN])
    >>> np.ma.fix_invalid(a)
    masked_array(data = [8.08970226 -- -- 8.30043545 -- -- -- --],
                 mask = [False  True  True False  True  True  True  True],
           fill_value = 1e+20)
    
    >>> print _
    [8.08970226 -- -- 8.30043545 -- -- -- --]
    

    或者因为您需要它作为特定列表:

    >>> np.ma.fix_invalid(a).astype('|S10').tolist(fill_value='--')
    ['8.08970226', '--', '--', '8.30043545', '--', '--', '--', '--']
    

    【讨论】:

    • 谢谢。这行得通,但我需要为 Latex 表穿插“&”元素,这会增加复杂性。
    • @dcnicholls 我将其更改为保存到列表中,它比您的代码长,但这似乎是 masked array 的工作
    • 这是一个不错的单行。谢谢
    • 你也可以直接使用np.ma.fix_invalid
    • @tiago 更好,更新和社区维基,因为这是一种更好的方式
    猜你喜欢
    • 2019-08-11
    • 2018-07-05
    • 2020-08-09
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2017-06-25
    • 2021-08-06
    相关资源
    最近更新 更多