You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何提取嵌套列表各子列表对应元素并计算均值与组合标准差

问题说明

你有两个结构完全相同的嵌套列表,内容如下:

x = [[array([1.39555504e-06, 3.92652210e-04, 1.25352408e-01, 2.14678565e+01])],
 [array([1.67217238e-07, 3.88075043e-04, 1.26022677e-01, 2.41765099e+01])],
 [array([6.95260542e-07, 3.86892681e-04, 1.25952180e-01, 2.39032518e+01])]]
sd_x = [[array([2.20316800e-06, 3.16566115e-06, 5.58783598e-04, 2.23978679e+00])],
 [array([2.15490637e-06, 3.13506583e-06, 5.47878385e-04, 2.22232169e+00])],
 [array([2.15498845e-06, 3.12207305e-06, 5.50507349e-04, 2.25939186e+00])]]

你需要计算所有子列表第i个对应位置元素的均值,例如所有子列表第一个元素[1.39555504e-06, 1.67217238e-07, 6.95260542e-07]的均值,同时结合sd_x中存储的对应标准差,计算均值的综合标准差。

目前已实现可正常运行的均值计算代码:

mean = np.array([np.mean(list(np.array(fit_sin).T[0])),np.mean(list(np.array(fit_sin).T[1])),\
                np.mean(list(np.array(fit_sin).T[2])),np.mean(list(np.array(fit_sin).T[3]))]); 

现在需要按照公式st_dev= sqrt (sum (x[ij]/sd_x[ij])**2 )实现标准差的计算,其中每个子列表长度i=4,外层列表长度j=3。


实现方案

首先可以先将嵌套列表转换为numpy数组并去掉多余的维度,简化后续计算逻辑,不用手动逐个索引遍历:

import numpy as np

# 拉平原始数据的多余维度,转换后形状为 (3,4),3行对应外层3个元素,4列对应每个数组的4个值
x_arr = np.squeeze(np.array(x))
sd_x_arr = np.squeeze(np.array(sd_x))

# 原有均值计算可以简化为一行,效果和你现有代码完全一致
mean = x_arr.mean(axis=0)

# 按给定公式计算综合标准差,axis=0表示按列聚合计算,最终得到长度为4的结果数组,和mean一一对应
st_dev = np.sqrt(np.sum((x_arr / sd_x_arr)**2, axis=0))

如果你希望和原有代码风格保持一致,逐个索引计算也可以用如下写法:

st_dev = np.array([
    np.sqrt(np.sum((x_arr[:,0]/sd_x_arr[:,0])**2)),
    np.sqrt(np.sum((x_arr[:,1]/sd_x_arr[:,1])**2)),
    np.sqrt(np.sum((x_arr[:,2]/sd_x_arr[:,2])**2)),
    np.sqrt(np.sum((x_arr[:,3]/sd_x_arr[:,3])**2))
])

以上实现完全匹配你给出的公式规则,如果你后续需要调整为加权平均对应的标准差,可以在此基础上修改聚合逻辑即可。


内容的提问来源于stack exchange,提问作者Krystal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:15:03