为了账号安全,请及时绑定邮箱和手机立即绑定

如果列表的值大于某个特定值,则更改它们

如果列表的值大于某个特定值,则更改它们

翻过高山走不出你 2021-03-22 21:06:24
我正在从文本文件中读取列表,并采用此列表的标准偏差,所以我想知道如何使值偏离均值超出一个标准差,而仅用作偏离均值的一个标准偏差。这是我正在使用的代码的一部分:a=np.genfromtxt('meanvals2.txt').T[1]b=np.std(a)c=np.mean(a)ok=(a>(c-b))*(a<(c+b)) # within 1st deviationh=a[ok]print h此代码仅删除一个标准偏差之外的所有值。我将如何更改它,以使这些删除的值的上限为平均值的1个标准偏差,但保留在数据集中?例如,如果我的清单是[1,2,3,4,5,20],则标准偏差为7.08,平均值为5.88。因此,远离平均值的一个标准偏差是12.96或-1.2,因此当前我的代码将排除此范围之外的任何数字,因此列表将为[1,2,3,4,5],但我希望列表实际读取[ 1,2,3,4,5,12.96]。我该怎么做
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我想我可以分两个步骤进行操作:


a = np.genfromtxt('meanvals2.txt').T[1] 

b = np.std(a)

c = np.mean(a)


#step 1, values lower than 1 std from mean

ok = a > (c - b)

a[~ok] = c - b


#step 2, values higher than 1 std from mean

ok = a < (c + b)

a[~ok] = c + b


print a

当然,如果您真的想要一个单独的数组h,可以先做h = a.copy(),然后再使用h代替a。


以您的数据为例:


>>> a = np.array([1,2,3,4,5,20],dtype=np.float32)

>>> b = np.std(a)

>>> c = np.mean(a)

>>> print b

6.46572151487

>>> print c

5.83333333333

>>> ok = a > (c - b)

>>> a[~ok] = c - b

>>> ok = a < (c + b)

>>> a[~ok] = c + b

>>> print a

[  1.          2.          3.          4.          5.         12.2990551]


查看完整回答
反对 回复 2021-03-30
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号