如何解决将标准偏差函数转换为 numpy 形式
我想获得由 number 定义的每个第 n 个数字的标准偏差。所以它需要列表中每第 5 个数字的标准偏差。那么我如何才能将下面代码中的函数 std
转为 np.std
的 numpy 格式。
import numpy as np
number = 5
list_= np.array([457.334015,424.440002,394.795990,408.903992,398.821014,402.152008,435.790985,423.204987,411.574005,404.424988,399.519989,377.181000,375.467010,386.944000,383.614990,375.071991,359.511993,328.865997,320.510010,330.079010,336.187012,352.940002,365.026001,361.562012,362.299011,378.549011,390.414001,400.869995,394.773010,382.556000])
for i in range(len(list_)-number):
y_mean = sum(list_[i:i+number])/number
#Standard Dev function = square root((first list value - y_mean)+(second list value - y_mean) + (third list value - y_mean)/n-1)
std = (sum([(k - y_mean)**2 for k in list_[i:i+number]])/(number-1))**0.5
解决方法
看来您要测量的是特定窗口的滚动标准偏差。您可以结合使用列表推导式 np.std
:
>>> [list_[i:i+number].std() for i in range(0,len(list_)-number)]
[22.67653382706694,10.394077295510364,14.600764816599321,13.828019444486458,...
11.249337331453159,15.436611278024934,13.65945977634702]
,
在我的脑海中,我不确定您是否可以使用相同的 np.std
函数以这种特定方式提供服务,但您至少可以创建自己的可以提供相同效果的函数。尝试使变量与函数同名可能会很棘手,因为它会导致程序出现一些混乱。如果经过调整,您的代码可能会起作用,但似乎没有必要,因为 numpy 已经在其库中内置了一个 std 函数。但是,如果您想创建一个自定义函数来查找每个第 N 个数字的标准偏差,您可以使用以下代码:
import numpy as np
data_set = np.array(
[457.334015,424.440002,394.795990,408.903992,398.821014,402.152008,435.790985,423.204987,411.574005,404.424988,399.519989,377.181000,375.467010,386.944000,383.614990,375.071991,359.511993,328.865997,320.510010,330.079010,336.187012,352.940002,365.026001,361.562012,362.299011,378.549011,390.414001,400.869995,394.773010,382.556000])
def nthStd(x,number):
std_dev_set = []
for i in x[::+number-1]:
std_dev_set.append(i)
return std_dev_set
您可以调用该函数来插入您想要使用的数据集以及您想要使用的第 N 个数字。然后,您可以将正态 np.std
应用于函数并返回标准偏差。
例如,调用该函数将如下所示并返回以下内容:
nthStd(data_set,5)
OUTPUT: [457.334015,375.46701,394.77301]
它返回的只是原始数据集中所有数字的列表,这些数字相隔 N 次。如果你想找到这些的标准偏差,你可以像这样使用 np.std
函数:
np.std(nthStd(data_set,5))
或者,您也可以将 np.std
步骤放入函数本身以节省空间。这样,函数就会返回标准偏差,并且可以一起调用。
def nthStd(x,number):
std_dev_set = []
for i in x[::+number-1]:
std_dev_set.append(i)
return np.std(std_dev_set)
nthStd(data_set,5)
OUTPUT: 35.05640152471951
编辑:根据一些评论,您似乎希望它遍历所有有效的 N 数字对,因此值为 2 的 [1,2,3,4,5,6] 列表将产生有效[1,2] [2,3] [3,4] [4,5] [5,6] 列表,然后计算每个列表的标准偏差。可以通过添加另一个 for 循环来将此更改添加到原始公式中,如下所示:
def nthStd(x,number):
std_dev_set = []
std_answer = []
for k in range(0,len(x)+1-number):
std_dev_set.clear()
for i in x[k:number+k]:
std_dev_set.append(i)
std_answer.append(np.std(std_dev_set))
return std_answer
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。