【问题标题】:Replace outlers with NA in numpy array [closed]在numpy数组中用NA替换异常值[关闭]
【发布时间】:2018-07-02 17:40:15
【问题描述】:

给定一个像这样的 numpy 数组

[[100, 110, 0.01, 110], [120, 100, 112, 100], [4000, 100, 200, 100]]

如何用 NA 替换异常值?

[[100, 110, NA, 110], [120, 100, 112, 100], [NA, 100, 200, 100]]

至于异常值检测,我对平均值的 2 个 SD 感到满意

【问题讨论】:

  • 您能否提供一个您迄今为止尝试过的示例,即。某种循环遍历数组元素的函数?目前这太少了,无法提供有意义的帮助。

标签: python numpy na outliers


【解决方案1】:

我假设您在某处编码或导入了 SD 和均值函数。

所以你应该这样编码:

sd = my_sd_function(my_array)
mean = my_mean_function(my_array)
outliers = (my_array > (mean + 2 * sd)) | (my_array < (mean - 2 * sd))
my_array[outliers] = NA

但是考虑一下:

  • 说真的,我不知道你所说的 NA 是什么意思。也许None
  • 我不了解您的数组的结构来制作适当的功能。也许这些功能可以满足您的需求?:

    def my_mean_function(arr):
        return arr.sum() / arr.size
    
    def my_sd_function(arr):
        mean = my_mean_function(arr)
        sqrerr = ((arr - mean) ** 2).sum() / arr.size
        return sqrt(sqrerr)
    

这里你应该知道的核心部分是根据你想要的条件实际选择和更新数组元素。

在这里,您将使用 &amp; ~| 而不是 and notor 关键字。这是因为 numpy 数组以某种方式定义了它们的实现以使用此类运算符(而语言构造函数 and ornot 实际上并不是可以重载的运算符)。

这样的构造返回可以像数组一样受到威胁的对象(您可以在控制台/ipython 中打印outliers,看看我在说什么)。

第二部分是您可以将my_array[...] 作为索引传递给,实际上是索引列表或类似的结构(例如切片)并以有效的方式检索/更改此类元素(IIRC 这种方法创建了称为 view 到 numpy 数组中底层原始数据 blob 中的数据)。

【讨论】:

  • 是的 - 与 NA 相反,我一直在寻找没有。它给了我一个 nan,我可以用它来过滤掉异常值
猜你喜欢
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 2022-10-31
  • 1970-01-01
  • 2014-06-28
  • 2019-05-03
  • 2018-02-21
相关资源
最近更新 更多