我有一台激光是通过信号分离器发送的。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角上的平均值和标准差。我希望这是有意义的,并提前感谢您的帮助!
发布于 2022-01-15 19:16:40
您可以将数据组织在中,其中有一列表示角度值,然后为每个二极管设置一列:
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)根据您提供的数据,您将得到如下内容:
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
...然后,如果你想画一个情节:
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()完整代码
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
在您提供的数据中,可能有一个错误:diode1和diode3的角度和面积都有41个值。相反,diode2的角度为41值,而区域为45值,因此存在失配。请检查您的diode2数据。
https://stackoverflow.com/questions/70724327
复制相似问题