Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除一行数据,其中包含的值与平均值之间的偏差超过两个标准差_Python_Python 3.x_List Comprehension - Fatal编程技术网

Python 删除一行数据,其中包含的值与平均值之间的偏差超过两个标准差

Python 删除一行数据,其中包含的值与平均值之间的偏差超过两个标准差,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,所以我有一个列表作为我的数据集X。我计算了每行的平均值和标准偏差,并将它们存储到各自的列表中。我的目标是找出X的哪些行有异常值(与平均值相差两个标准差以上的值),并删除整行。我只完成了从单个测试列表而不是列表列表中删除异常值: from math import sqrt def std_dev(lst): # standard deviation function mean = float(sum(lst)) / len(lst) return sqrt(sum((x -

所以我有一个列表作为我的数据集X。我计算了每行的平均值和标准偏差,并将它们存储到各自的列表中。我的目标是找出X的哪些行有异常值(与平均值相差两个标准差以上的值),并删除整行。我只完成了从单个测试列表而不是列表列表中删除异常值:

from math import sqrt

def std_dev(lst): # standard deviation function
     mean = float(sum(lst)) / len(lst)
     return sqrt(sum((x - mean)**2 for x in lst) / len(lst))

def compute_std(X):
     std = []
     std.append([std_dev(char) for char in X])
     return std

std = compute_std(X)

def means(lst):
     return float(sum(lst)) / len(lst)

def compute_mean(X):
     mean = []
     mean.append([means(chars) for chars in X])
     return mean

mean = compute_mean(X)

final_list1 = [x for x in X if (x > mean - 2 * std)]
final_list = [x for x in final_list1 if (x < mean + 2 * std)]
从数学导入sqrt
def标准偏差(lst):#标准偏差函数
平均值=浮动(总和(lst))/len(lst)
返回sqrt(总和((x-平均值)**2表示lst中的x)/len(lst))
def计算标准(X):
标准=[]
std.append([X中字符的std_dev(char)])
返回标准
标准=计算标准(X)
def是指(lst):
返回浮点(总和(lst))/len(lst)
def计算平均值(X):
平均值=[]
mean.append([X中字符的平均值(字符)])
回归均值
平均值=计算平均值(X)
最终列表1=[x代表x,如果(x>mean-2*std)]
最终清单=[x代表最终清单1中的x,如果(x

最后两行代码只在一个列表上工作,我希望它在X中遍历每个列表。我对python和列表理解还不熟悉。

我没有使用列表理解来获取
X
的有效行,我不确定是否正确找到了符合条件的行(使用stdev和mean)

from statistics import mean, stdev
from random import randint, seed

#seed(1)

X = []
final_list = []

for i in range(10):
    M = []
    for j in range(25):
        M.append(randint(-25, 1000))
    X.append(M)

for row in X:
    sd = stdev(row)
    avg = mean(row)
    #print(avg, sd)
    
    high = avg + 2 * sd
    low = avg - 2 * sd

    if all(low < num < high for num in row):
        final_list.append(row)

print(len(final_list))
也许其他人可以创建一个理解,但我认为有太多的计算(平均值、stddev和比较)来制作一个简洁的列表理解

from statistics import mean, stdev
from random import randint, seed

#seed(1)

X = []
final_list = []

for i in range(10):
    M = []
    for j in range(25):
        M.append(randint(-25, 1000))
    X.append(M)

for row in X:
    sd = stdev(row)
    avg = mean(row)
    #print(avg, sd)
    
    high = avg + 2 * sd
    low = avg - 2 * sd

    if all(low < num < high for num in row):
        final_list.append(row)

print(len(final_list))
从统计数据导入平均值,stdev
从随机导入randint,种子
#种子(1)
X=[]
最终清单=[]
对于范围(10)内的i:
M=[]
对于范围(25)内的j:
M.append(randint(-251000))
X.1(M)
对于X中的行:
sd=stdev(世界其他地区)
平均值=平均值(行)
#打印(平均值,标准差)
高=平均值+2*sd
低=平均值-2*sd
如果全部(低<数值<行中数值高):
最终列表。追加(行)
打印(len(最终清单))

已经有均值和(样本)标准差。@ChrisCharley是的,我知道。我对列表理解部分比较困惑。非常感谢你的帮助!你能解释一下你在以“范围(10)中的i”开头的第一段代码中做了什么吗?@c_collins创建了10个列表(附加到
X
),其中每个列表包含25个从-25到1000的随机整数。我这样做只是为了创建一个10个列表的样本
X
,每个列表中有25个随机数。这只是给出了一些示例值,以便在代码的后面应用stdev和mean函数。