【问题标题】:Mask ndarray with boolean ndarray to replace nans用布尔 ndarray 屏蔽 ndarray 以替换 nans
【发布时间】:2019-03-07 00:21:52
【问题描述】:

我正在尝试使用布尔掩码来寻址 numpy 数组中的行:

isnan = np.isnan(self.X[:, AGE_COLUMN].astype(float))
self.X[isnan, AGE_COLUMN] = np.mean(self.X[:, AGE_COLUMN].astype(float))

isnan 和 X 是 dtype

首先我检查年龄列中的哪些行是 nan。然后我想将这些值设置为所有年龄段的平均值。调试器对self.X[isnan, AGE_COLUMN] 有以下结果:

[nan nan nan nan nan nan nan nan nan nan ....]

如果我尝试self.X[[True, False, True], AGE_COLUMN],例如它会返回索引行。但是使用 isnan 数组就不行了。

如何解决此问题以将 nans 设置为平均值。

【问题讨论】:

  • Numpy 有nanmeannan_to_num 函数;这些应该会有所帮助。
  • somethingnanmeannan,你应该在计算平均值之前去掉nans

标签: python numpy nan masked-array


【解决方案1】:

使用numpy.nanmean 执行以下操作:它将忽略 NaNs

self.X[isnan, AGE_COLUMN] = np.nanmean(self.X[:, AGE_COLUMN].astype(float))

From the documentation

numpy.nanmean(a, axis=None, dtype=None, out=None, keepdims=)

计算沿指定轴的算术平均值, 忽略 NaN。

返回数组元素的平均值。平均值被接管 默认情况下展平的数组,否则在指定的轴上。 float64 中间值和返回值用于整数输入。

对于所有 NaN 切片,返回 NaN 并引发 RuntimeWarning。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 2018-07-29
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多