【问题标题】:numpy: using operator - with arrays containing Nonenumpy:使用运算符 - 使用包含 None 的数组
【发布时间】:2013-01-29 07:11:48
【问题描述】:

我有一个数字列表,我将其放入一个 numpy 数组中:

>>> import numpy as np
>>> v=np.array([10.0, 11.0])

然后我想从数组中的每个值中减去一个数字。使用 numpy 数组可以这样做:

>>> print v - 1.0
[  9.  10.]

不幸的是,我的数据经常包含缺失值,由None 表示。对于此类数据,我收到此错误:

>>> v=np.array([10.0, 11.0, None])
>>> print v - 1.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'

对于上面的例子,我想得到的是:

 [  9.  10.  None]

我怎样才能以简单有效的方式实现它?

【问题讨论】:

    标签: python numpy missing-data


    【解决方案1】:

    我的建议是使用掩码数组:

    v = np.ma.array([10., 11, 0],mask=[0, 0, 1])
    print v - 10
    >>> [0.0 1.0 --]
    

    或NaN

    v = np.array([10.,11,np.nan])
    print v - 10
    >>> [  0.   1.  nan]
    

    我实际上更喜欢将 NaN 作为缺失数据指示符。

    【讨论】:

    • 这些选项也比使用 None 好得多,因为 OP 的数组实际上是 object 类型,因此效率非常低,比浮点数组更栅格化。
    • 非常感谢,使用numpy.nan 听起来不错,比屏蔽数组更实用。掩码数组何时会比将缺失数据指示符表示为 numpy.nan 更好?
    • 我认为掩码数组可能更适合执行一些操作,例如数组的总和和平均值(然后正确处理丢失的数据)。另外,我想您可以将实际的 NaN 与丢失的数据区分开来。否则(我几乎总是这么说)nans 是更好的 IMO。
    猜你喜欢
    • 2010-11-01
    • 2010-11-27
    • 2017-11-15
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2021-02-09
    • 2017-10-25
    相关资源
    最近更新 更多