elsiwaveQI 2022-11-24 22:23 采纳率: 57.9%
浏览 43
已结题

二维数组异常值替换均值

问题遇到的现象和发生背景

在写二维数组异常值替换代码中,遇到一个问题,如何将数组中的异常值使用该列的均值进行替换,需要逐列进行。异常值判断已找到了解决办法。目前查阅文献资料,发现都是针对一维数组或list进行的操作,没有对二维数组的这类操作(异常值替换为均值)。

用代码块功能插入代码,请勿粘贴截图

mean = np.mean(data_array, axis=1)
std = np.std(data_array, axis=1)

floor = mean - 3std
upper = mean + 3
std

for i, val in enumerate(data_array): #这个代码是对一维数组的操作,对二维数组如何修改?
data_array[i] = float(np.where(((val<floor)|(val>upper)), mean, val)) #这个代码是对一维数组的操作,对二维数组如何修改?

运行结果及报错内容

ValueError: operands could not be broadcast together with shapes (4,) (3,)

我的解答思路和尝试过的方法

按列求均值和标准差,对异常值(偏离3倍标准差)使用该列均值替换。使用上述代码进行运算,但没有通过。

我想要达到的结果

修改优化代码或给出更好的解决方案,最终达到异常值由该列均值替代。代码要通用的。谢谢!

  • 写回答

1条回答 默认 最新

  • 阿_旭 2022-11-24 23:05
    关注

    不知道下面代码能否满足你的要求

    import numpy as np
    data = np.array([[1,1000,3],[3,20000,5],[4,5,6]])
    # 以列为基础求每一列的均值与标准差
    mean_value = np.mean(data, axis=0)
    std_value = np.std(data, axis=0)
    
    floor = mean_value - 3*std_value
    upper = mean_value + 3*std_value
    
    columns = data.shape[1]
    rows = data.shape[0]
    # 遍历每一列
    for col in range(columns):
        column = data[:,col]
        for row, val in enumerate(column):
            # 用该列均值替换异常值
            if val < floor[col] or val > upper[col]:
                data[row,col] = mean_value[col]
    print(data)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭