首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >求三组数据的均值和标准差

求三组数据的均值和标准差
EN

Stack Overflow用户
提问于 2022-01-15 18:39:38
回答 1查看 52关注 0票数 -2

我有一台激光是通过信号分离器发送的。90%的光进入扩散器,这是由光电倍增管(PMT)检测到的。另外10%的信号用于一个单独的硅光电二极管,用于在扩散器测试期间监测激光的功率。扩散器通过-60°到+60°的范围旋转,每3°停止记录来自PMT和光电二极管的光信号的面积(这称为一次扫描)。光电二极管的数据是(x,y) =(角,面积)。我想要计算平均和标准偏差的光电二极管面积在每个角位置的扩散。

所以说三组光电二极管区域:

diode1 = (-60、-57、-54、-51、-48、-45、-42、-39、-36、-33、-30、-27、-24、-21、-18、-15、-12、-9、-6、-3、0、3、6、9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,0.01011,0.01007,0.01013,0.01005,0.01014,0.01018,0.01013,0.01021,0.01020,0.01020,0.01019,0.01028,0.01021,0.01026,0.01025,0.01020,0.01024,0.01029,0.01019,0.01023,0.01027,0.01019,0.01031,0.01030,0.01031,0.01034,0.01021,0.01019,0.01019,0.01025,0.01034,0.01020,0.01024,0.01029,0.01011,0.01013,0.01025,0.01013,0.01025,0.01004,0.01003)

diode2 = (-60、-57、-54、-51、-48、-45、-42、-39、-36、-33、-30、-27、-24、-21、-18、-15、-12、-9、-6、-3、0、3、6、9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,0.01016,0.01004,0.01019,0.01023,0.01018,0.01022,0.01036,0.01027,0.01023,0.01034,0.01033,0.01026,0.01028,0.01040,0.01035,0.01034,0.01032,0.01039,0.01021,0.01036,0.01035,0.01025,0.01024,0.01035,0.01034,0.01030,0.01028,0.01038,0.01020,0.01024,0.01028,0.01017,0.01014,0.01025,0.01022,0.01025,0.01022,0.01025,0.01022,0.01025,0.01021,0.01006,0.01021,001020,0.01012)

diode3 = (-60、-57、-54、-51、-48、-45、-42、-39、-36、-33、-30、-27、-24、-21、-18、-15、-12、-9、-6、-3、0、3、6、9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,0.009954,0.01001,0.01001,0.01010,0.009978,0.01004,0.01010,0.01010,0.01009,0.01003,0.01008,0.01004,0.01007,0.01008,0.01015,0.01016,0.01017,0.01011,0.01031,0.01003,0.01001,0.01015,0.01015,0.01014,0.01008,0.01016,0.01022,0.01005,0.01009,0.01014,0.01012,0.009989,0.01004,0.01008,0.009914,0.009974,0.009973,0.009958,0.01023,0.01008,0.009901)

每个数据集的x值是相同的,因为它们只是重复扫描。我感兴趣的是计算y值在每个相应的x角上的平均值和标准差。我希望这是有意义的,并提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2022-01-15 19:16:40

您可以将数据组织在中,其中有一列表示角度值,然后为每个二极管设置一列:

代码语言:javascript
运行
复制
columns = ['diode1', 'diode2', 'diode3']
diodes = [diode1, diode2, diode3]

df = pd.DataFrame()
df['angle'] = diode1[0]
for col, d in zip(columns, diodes):
    df[col] = d[1]

然后,您可以轻松地计算每一行(角度值)的均值和标准差:

代码语言:javascript
运行
复制
df['mean'] = df[columns].mean(axis = 1)
df['std'] = df[columns].std(axis = 1)

根据您提供的数据,您将得到如下内容:

代码语言:javascript
运行
复制
    angle   diode1   diode2    diode3      mean       std
0     -60  0.01011  0.01016  0.009954  0.010075  0.000107
1     -57  0.01007  0.01004  0.010010  0.010040  0.000030
2     -54  0.01013  0.01019  0.010010  0.010110  0.000092
3     -51  0.01005  0.01023  0.010100  0.010127  0.000093
4     -48  0.01014  0.01018  0.009978  0.010099  0.000107
5     -45  0.01018  0.01022  0.010040  0.010147  0.000095
6     -42  0.01013  0.01036  0.010100  0.010197  0.000142
7     -39  0.01021  0.01027  0.010100  0.010193  0.000086
8     -36  0.01020  0.01023  0.010090  0.010173  0.000074
9     -33  0.01020  0.01034  0.010030  0.010190  0.000155
10    -30  0.01019  0.01033  0.010080  0.010200  0.000125
...

然后,如果你想画一个情节:

代码语言:javascript
运行
复制
fig, ax = plt.subplots()

ax.plot(df['angle'], df['mean'], label = 'mean')
ax.plot(df['angle'], df['mean'] + df['std'], label = 'mean + std')
ax.plot(df['angle'], df['mean'] - df['std'], label = 'mean - std')

ax.legend(frameon = True)
ax.set_xlabel('angle (deg)')
ax.set_ylabel('area')

plt.show()

完整代码

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import pandas as pd


diode1 = ([-60,-57,-54,-51,-48,-45,-42,-39,-36,-33,-30,-27,-24,-21,-18,-15,-12,-9,-6,-3,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60],[0.01011,0.01007,0.01013,0.01005,0.01014,0.01018,0.01013,0.01021,0.01020,0.01020,0.01019,0.01028,0.01021,0.01026,0.01025,0.01020,0.01024,0.01029,0.01019,0.01023,0.01027,0.01019,0.01031,0.01030,0.01031,0.01034,0.01021,0.01019,0.01019,0.01025,0.01034,0.01020,0.01024,0.01029,0.01011,0.01013,0.01025,0.01013,0.01025,0.01004,0.01003])
diode2 = ([-60,-57,-54,-51,-48,-45,-42,-39,-36,-33,-30,-27,-24,-21,-18,-15,-12,-9,-6,-3,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60],[0.01016,0.01004,0.01019,0.01023,0.01018,0.01022,0.01036,0.01027,0.01023,0.01034,0.01033,0.01026,0.01028,0.01040,0.01035,0.01034,0.01032,0.01039,0.01021,0.01036,0.01035,0.01025,0.01024,0.01035,0.01034,0.01030,0.01028,0.01038,0.01020,0.01024,0.01028,0.01017,0.01014,0.01025,0.01022,0.01025,0.01022,0.01025,0.01022,0.01025,0.01021])
diode3 = ([-60,-57,-54,-51,-48,-45,-42,-39,-36,-33,-30,-27,-24,-21,-18,-15,-12,-9,-6,-3,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60],[0.009954,0.01001,0.01001,0.01010,0.009978,0.01004,0.01010,0.01010,0.01009,0.01003,0.01008,0.01004,0.01007,0.01008,0.01015,0.01016,0.01017,0.01011,0.01031,0.01003,0.01001,0.01015,0.01015,0.01014,0.01008,0.01016,0.01022,0.01005,0.01009,0.01014,0.01012,0.009989,0.01004,0.01008,0.009914,0.009974,0.009973,0.009958,0.01023,0.01008,0.009901])

columns = ['diode1', 'diode2', 'diode3']
diodes = [diode1, diode2, diode3]

df = pd.DataFrame()
df['angle'] = diode1[0]
for col, d in zip(columns, diodes):
    df[col] = d[1]

df['mean'] = df[columns].mean(axis = 1)
df['std'] = df[columns].std(axis = 1)


fig, ax = plt.subplots()

ax.plot(df['angle'], df['mean'], label = 'mean')
ax.plot(df['angle'], df['mean'] + df['std'], label = 'mean + std')
ax.plot(df['angle'], df['mean'] - df['std'], label = 'mean - std')

ax.legend(frameon = True)
ax.set_xlabel('angle (deg)')
ax.set_ylabel('area')

plt.show()

Note

在您提供的数据中,可能有一个错误:diode1diode3的角度和面积都有41个值。相反,diode2的角度为41值,而区域为45值,因此存在失配。请检查您的diode2数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70724327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档