【问题标题】:numpy 1D array to numpy arraysnumpy 一维数组到 numpy 数组
【发布时间】:2013-10-24 13:10:06
【问题描述】:

我想在 Python 中读取一维 numpy 数组并生成另外两个 numpy 数组:

  • 如果没有“nan”值,则第一个是输入。否则,输入 'nan' 值替换为 '0'
  • 第二个是掩码,1='输入值不是'nan'','0'='输入值是nan''

例如:

a = numpy.array([1,2,numpy.nan,4])

会给

[1,2,0,4]
[1,1,0,1]

在 python 中最有效的方法是什么?

谢谢

【问题讨论】:

  • 看看numpy.ma.masked_invalid()。它给了你这两个。
  • 看起来不错,虽然数组被'--'屏蔽了。掩码值似乎没有任何配置。干杯

标签: python arrays numpy


【解决方案1】:

要将nan 替换为0,请使用numpy.nan_to_num

>>> a = numpy.array([1,2,numpy.nan,4])
>>> numpy.nan_to_num(a)
array([ 1.,  2.,  0.,  4.])

使用numpy.isnannan 转换为True,非nan 数字转换为False。然后从1 中减去它们。

>>> numpy.isnan(a)
array([False, False,  True, False], dtype=bool)
>>> 1 - numpy.isnan(a)
array([ 1.,  1.,  0.,  1.])

【讨论】:

  • 谢谢,这正是我正在寻找的 :) Vikash 的解决方案也很好。对于最后一个命令,我也设法使用 ~ 符号而不是减去一个。
  • @carmellose,我稍微更新了答案代码。如果使用1 - numpy.isnan(..),则不需要使用astype
【解决方案2】:

第一个:

numpy.nan_to_num(a)

第二个:

numpy.invert(numpy.isnan(a)).astype(int)

【讨论】:

    【解决方案3】:

    要将 NaN 转换为零,请使用:

    numpy.nan_to_num(a)
    

    要将非 NaN 设置为 1,将 NaN 设置为 0,请尝试:

    numpy.isfinite(a)*1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2011-08-22
      • 2015-01-29
      相关资源
      最近更新 更多