【问题标题】:Copy and replace values in numpy array.. nans will be nan but other values will be zero复制和替换 numpy 数组中的值.. nans 将是 nan 但其他值将为零
【发布时间】:2018-04-25 16:46:31
【问题描述】:

我有一个 numpy 数组,我想将它复制到另一个 numpy 数组,并将除 nan 值之外的所有值替换为零。你能帮忙吗?

【问题讨论】:

  • b = a.copy(); b[~np.isnan(b)] = 0
  • 谢谢!只需添加一点,如果我有另一个名为 c 的数组,并且如果 b 中的值为 nan,我想将值从 c 复制到 b 怎么办?比如,使用值为 nan 的特定索引。
  • b[np.isnan(b)] = c[np.isnan(b)]b = np.where(np.isnan(b), c, b) 或从a 一次性完成所有操作:b = np.where(np.isnan(a), c, 0)
  • 我认为np.where 解决方案是最干净的,也可能是最快的。

标签: python arrays numpy nan


【解决方案1】:

一种方法是使用numpy.where

来自@GrantWilliams 的数据。

问题 1

import numpy as np

a = np.array([1, 2, np.nan, 4, 5, np.nan])
c = np.array([10, 11, 12, 13, 14, 15])

res1 = np.where(np.isnan(a), np.nan, 0)

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

问题 2

res2 = np.where(np.isnan(a), c, 0)

array([ 0,  0, 12,  0,  0, 15])

【讨论】:

  • 我非常喜欢你对问题 2 的解决方案。 np.where 真的很干净
  • @GrantWilliams,谢谢 - 你的更容易适应就地操作。但两者都适用于 OP。
【解决方案2】:

如果你想设置一个 0 数组,那么我想没有必要复制原始数组。只需创建一个零数组并将适当的索引设置为 nan。

import numpy as np

a = np.array([1, 2, np.nan, 4, 5, np.nan])
b = np.zeros(a.shape)
b[np.isnan(a)] = np.nan

输出

>>> b
[ 0.  0. nan  0.  0. nan]

编辑:现在您已经更新了问题,您可以改用它:

import numpy as np

a = np.array([1, 2, np.nan, 4, 5, np.nan])
b = np.zeros(a.shape)
c = np.array([10, 11, 12, 13, 14, 15])
b[np.isnan(a)] = c[np.isnan(a)]

print(b)

输出

>>> b
[ 0.  0. 12.  0.  0. 15.]

如果您也在使用,请随意将 dtype 更改为 int

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2013-03-12
    • 2018-09-18
    • 1970-01-01
    • 2012-06-21
    • 2015-09-08
    相关资源
    最近更新 更多