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

二维数组异常值替换均值

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

在写二维数组异常值替换代码中,遇到一个问题,如何将数组中的异常值使用该列的均值进行替换,需要逐列进行。异常值判断已找到了解决办法。目前查阅文献资料,发现都是针对一维数组或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 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序