【问题标题】:How to integrate P(x,y) with X, Y, P(X,Y) being arrays如何将 P(x,y) 与 X, Y, P(X,Y) 整合为数组
【发布时间】:2020-10-08 11:54:42
【问题描述】:

基本上,我有一组数据(4 列)对应于实验的各种结果。 第一、二、三列分别为xyp;其中p 表示概率P(x, y)。最后一列是p上的错误。

现在,我想找到的是

或者

也就是说,我想对我的数据执行符号积分,因为我想绘制它的结果。

我的一些数据:

           x            y       p        ep
0   2.967330  2549.603175     1.0   1.00000
1   2.987216  2549.603175     0.0   0.00000
2   3.007102  2549.603175     0.0   0.00000
3   3.026989  2549.603175     3.0   1.73205
4   3.046875  2549.603175     0.0   0.00000
5   3.066761  2549.603175     4.0   2.00000
6   3.086648  2549.603175     1.0   1.00000
8   3.126420  2549.603175    10.0   3.16228
9   3.146307  2549.603175    24.0   4.89898
10  3.166193  2549.603175    35.0   5.91608
11  3.186080  2549.603175    71.0   8.42615
12  3.205966  2549.603175   118.0  10.86280
13  3.225852  2549.603175   188.0  13.71130
14  3.245739  2549.603175   337.0  18.35760
15  3.265625  2549.603175   475.0  21.79450
16  3.285511  2549.603175   706.0  26.57070
17  3.305398  2549.603175  1093.0  33.06060
18  3.325284  2549.603175  1536.0  39.19180
19  3.345170  2549.603175  2239.0  47.31810

在 x 轴上,数据等距约为 -0.01988637

在“Python Companion to Data Science”一书中 ” 由 D. Zinoviev 撰写,“部分和大致相当于积分”。我想使用这种部分和方法,但我不知道如何使用。

提前谢谢大家。

问候。

【问题讨论】:

  • 你说你想做数值积分,但是如果你想要 \int P(x,y)dx,那将意味着符号积分,因为 y 仍然会保留在结果中。你确定不想要\int\int P(x,y) dx dy?
  • 还有一件事:你的数据对我来说很奇怪:如果你有一个函数 P(x,y) 你应该有一个 Nx*Ny 值的二维数组,但是你有 2 个 Nx 的一维数组+Ny 个值(不包括 p 及其误差。)
  • @Feodoran 我的错...它们的等距约为:-0.01988637。 (对于 x)评论你之前关于我的数据形状的问题:我完全同意你的观点,也许我的措辞有点奇怪,因为英语不是我的母语。我的主管(我正在实习)说第三列代表概率 P(x,y) 但是我同意你的观点,但是我拥有的数据集没有以任何方式修改......我应该重塑 P( x,y) 在二维数组上屈服?
  • 哦,等等,我刚刚意识到:你所有的 y 值都是相同的。因此,您可以将第一列相加并乘以 dx=0.01988。如果你做 cumsum(),那么你会得到以 x 作为积分上限的定积分(作为 x 的函数)。
  • 嗨@BLDMoh,您的集成领域是什么?您有一个函数要在矩形、圆形、三角形、整个域或...上进行积分

标签: python matplotlib numpy-ndarray numerical-integration


【解决方案1】:

非常感谢您的洞察力、您的问题和您的 cmets。我找到了解决方案,我会解释它以帮助其他人。

@Feodoran 的评论给了我一个想法。我决定使用熊猫。 以下工作:

import pandas as pd
df = pd.read_excel(r'....')
df.columns = ['x','y','p','ep']
df = pd.DataFrame(df)

df['p_x'] = df.iloc[:,[1]+[2]].sum(axis=1)
df.plot(kind = 'line', x = 'x', y = 'p_x', color = 'red')
plt.show()

再次感谢。我希望它对其他人也有用。 问候。

PS:你可能已经猜到了,同样的方法可以得到p_y。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    相关资源
    最近更新 更多