开发者社区> 问答> 正文

如何在Python中使用枚举来计算列表的STD ?

我要计算一个列表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中的nanstd =[0.497, 0.77, 1.31, 5.301]。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 = []

问题来源StackOverflow 地址:/questions/59382009/how-do-i-use-enumerate-in-python-to-compute-std-of-a-list

展开
收起
kun坤 2019-12-27 17:20:34 484 0
1 条回答
写回答
取消 提交回答
  • 我会考虑用熊猫来做这个。它是一个库,允许对numpy数组中的数据集进行有效的处理,并免去了所有的循环和索引工作。 在本例中,我将定义一个dataframe,其中包含N_raytimes行和N_Height列,这样可以方便地以任何方式对数据进行切片和聚合。 这段代码给出了预期的输出。

    import pandas as pd
    import numpy as 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]
    ]
    Height = [10.0, 20.0, 30.0, 40]
    raytimes = [0, 0.1, 0.2]
    
    # Define a dataframe with the data
    df = pd.DataFrame(vr, columns=Height, index=raytimes)
    df.columns.name = "Height"
    df.index.name = "raytimes"
    
    # Split it out (this could be more elegant)
    w1 = df[df.index < 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]
    
    # Compute standard deviations
    w1sd = w1.std(axis=0, ddof=0).values
    w2sd = w2.std(axis=0, ddof=0).values
    w3sd = w3.std(axis=0, ddof=0).values
    w4sd = w4.std(axis=0, ddof=0).values
    
    2019-12-27 17:20:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载