Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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中使用enumerate计算列表的STD?_Python_Enumerate_Standard Deviation - Fatal编程技术网

如何在Python中使用enumerate计算列表的STD?

如何在Python中使用enumerate计算列表的STD?,python,enumerate,standard-deviation,Python,Enumerate,Standard Deviation,我试图计算列表的标准偏差vr。列表大小为32,包含大小为3980的数组。此数组表示给定高度处的值(3980高度) 首先,我将数据分成15分钟的数据块,其中分钟数在raytimes中给出raytimes也是大小32的列表(仅包含观察时间,vr) 我希望在每个高度级别上计算标准偏差,以便最终得到一个大小为3980的最终数组。这在我的代码中发生得很好。但是,我的代码在测试时没有生成正确的标准偏差值-也就是说,输出到w1sd、w2sd等的值不正确(但是数组大小正确:一个3980元素的数组)。我假设我在计

我试图计算列表的标准偏差
vr
。列表大小为32,包含大小为3980的数组。此数组表示给定
高度处的值(3980高度)

首先,我将数据分成15分钟的数据块,其中分钟数在
raytimes
中给出
raytimes
也是大小
32
的列表(仅包含观察时间,
vr

我希望在每个
高度
级别上计算标准偏差,以便最终得到一个大小为
3980
的最终数组。这在我的代码中发生得很好。但是,我的代码在测试时没有生成正确的标准偏差值-也就是说,输出到
w1sd
w2sd
等的值不正确(但是数组大小正确:一个
3980
元素的数组)。我假设我在计算标准差时混淆了错误的指数

下面是数据集中的示例值。所有数据应分为
w1
w1sd
,因为本例中提供的
raytimes
都在15分钟内(<0.25)。我想计算
vr
的第一个元素的标准偏差,即
2.0+3.1+2.1
的标准偏差,然后是第二个元素,或者
3.1+4.1+nan
的标准偏差,等等。
w1sd
的结果应该是
[0.497,0.499,1.0,7.5]
,但是下面的代码在
w1sd=[0.497,0.77,1.31,5.301]
中给出了一个
nanstd
nanstd
或我的索引有问题吗

vr = [
    [2.0, 3.1, 4.1, nan],
    [3.1, 4.1, nan, 5.1],
    [2.1, nan, 6.1, 20.1]
]
Height = [10.0, 20.0, 30.0, 40]
raytimes = [0, 0.1, 0.2]

for j, h in enumerate(Height): 
    for i, t in enumerate(raytimes):
        if raytimes[i] < 0.25:
            w1.append(float(vr[i][j]))
        elif 0.25 <= raytimes[i] < 0.5:
            w2.append(float(vr[i][j]))
        elif 0.5 <= raytimes[i] < 0.75:
            w3.append(float(vr[i][j]))
        else:
            w4.append(float(vr[i][j]))
    w1sd.append(round(nanstd(w1), 3))
    w2sd.append(round(nanstd(w2), 3))
    w3sd.append(round(nanstd(w3), 3))
    w4sd.append(round(nanstd(w4), 3))
    w1 = []
    w2 = []
    w3 = []
    w4 = []
vr=[
[2.0,3.1,4.1,nan],
[3.1,4.1,nan,5.1],
[2.1、nan、6.1、20.1]
]
高度=[10.0,20.0,30.0,40]
光线时间=[0,0.1,0.2]
对于枚举中的j,h(高度):
对于枚举中的i,t(光线时间):
如果光线时间[i]<0.25:
w1.附加(浮动(vr[i][j]))
ELIF 0.25 P>我会考虑使用这个。它是一个库,允许高效地处理
numpy
数组中的数据集,并将所有循环和索引从您手中解放出来

在本例中,我将使用
N_raytimes
行和
N_Height
列定义一个
dataframe
,这将允许以任何方式轻松地切片和聚合数据

这段代码给出了预期的输出

将熊猫作为pd导入
将numpy作为np导入
vr=[
[2.0,3.1,4.1,np.nan],
[3.1,4.1,np.nan,5.1],
[2.1,np.nan,6.1,20.1]
]
高度=[10.0,20.0,30.0,40]
光线时间=[0,0.1,0.2]
#使用数据定义数据帧
df=pd.DataFrame(vr,columns=Height,index=raytimes)
df.columns.name=“高度”
df.index.name=“光线时间”
#分开(这可能更优雅)
w1=df[df.指数<0.25]
w2=df[(df.index>=0.25)和(df.index<0.5)]
w3=df[(df.index>=0.5)和(df.index<0.75)]
w4=df[df.index>=0.75]
#计算标准差
w1sd=w1.std(轴=0,ddof=0)。数值
w2sd=w2.std(轴=0,ddof=0)。值
w3sd=w3.std(axis=0,ddof=0)。值
w4sd=w4.std(轴=0,ddof=0)。值

raytimes[i]
应该是
t
高度列表的目的是什么?您从未使用过
h
Height[j]
。这个循环可以是范围内j的
(len(Height)):
raytimes[i]应该是t——好的,谢谢,但是我最后得到的STD值仍然是错误的。当然,我可以更改范围(len(Height))中j的循环,但我相信我对STD值的计算仍然是错误的?重点是我认为我使用的enumerate是错误的,因为它在末尾为STD(w1sd)生成了错误的值。我的任何评论都与结果无关,它们只是风格而已。好的,谢谢。但是,如果有人能指出,为什么我在上述方案中对每个高度层的STD的计算是错误的。。。。?