如何在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的计算是错误的。。。。?