添加具有不同横坐标的数据

计算科学 插值 数据分析
2021-12-13 13:05:50

这个问题可能更适合天文堆栈交换网站,但我想我会在这里问。假设我有一些物体的测量值作为半径的函数。

这是一个使事情变得具体的示例:

# Object 1
In [92]: r1
Out[92]: 
array([ 0.05      ,  0.07040816,  0.09081633,  0.11122449,  0.13163265,
    0.15204082,  0.17244898,  0.19285714,  0.21326531,  0.23367347,
    0.25408163,  0.2744898 ,  0.29489796,  0.31530612,  0.33571429,
    0.35612245,  0.37653061,  0.39693878,  0.41734694,  0.4377551 ,
    0.45816327,  0.47857143,  0.49897959,  0.51938776,  0.53979592,
    0.56020408,  0.58061224,  0.60102041,  0.62142857,  0.64183673,
    0.6622449 ,  0.68265306,  0.70306122,  0.72346939,  0.74387755,
    0.76428571,  0.78469388,  0.80510204,  0.8255102 ,  0.84591837,
    0.86632653,  0.88673469,  0.90714286,  0.92755102,  0.94795918,
    0.96836735,  0.98877551,  1.00918367,  1.02959184,  1.05      ])
# Object 2
In [93]: r2
Out[93]: 
array([ 0.04      ,  0.06081633,  0.08163265,  0.10244898,  0.12326531,
    0.14408163,  0.16489796,  0.18571429,  0.20653061,  0.22734694,
    0.24816327,  0.26897959,  0.28979592,  0.31061224,  0.33142857,
    0.3522449 ,  0.37306122,  0.39387755,  0.41469388,  0.4355102 ,
    0.45632653,  0.47714286,  0.49795918,  0.51877551,  0.53959184,
    0.56040816,  0.58122449,  0.60204082,  0.62285714,  0.64367347,
    0.6644898 ,  0.68530612,  0.70612245,  0.72693878,  0.7477551 ,
    0.76857143,  0.78938776,  0.81020408,  0.83102041,  0.85183673,
    0.87265306,  0.89346939,  0.91428571,  0.93510204,  0.95591837,
    0.97673469,  0.99755102,  1.01836735,  1.03918367,  1.06      ])
# Object 3
In [94]: r3
Out[94]: 
array([ 0.045     ,  0.06540816,  0.08581633,  0.10622449,  0.12663265,
    0.14704082,  0.16744898,  0.18785714,  0.20826531,  0.22867347,
    0.24908163,  0.2694898 ,  0.28989796,  0.31030612,  0.33071429,
    0.35112245,  0.37153061,  0.39193878,  0.41234694,  0.4327551 ,
    0.45316327,  0.47357143,  0.49397959,  0.51438776,  0.53479592,
    0.55520408,  0.57561224,  0.59602041,  0.61642857,  0.63683673,
    0.6572449 ,  0.67765306,  0.69806122,  0.71846939,  0.73887755,
    0.75928571,  0.77969388,  0.80010204,  0.8205102 ,  0.84091837,
    0.86132653,  0.88173469,  0.90214286,  0.92255102,  0.94295918,
    0.96336735,  0.98377551,  1.00418367,  1.02459184,  1.045     ])

其中 r1、r2 和 r3 是我进行测量的径向列表(分别为对象 1、2 和 3)。测量结果如下所示:

In [95]: out1
Out[95]: 
array([ 0.39919261,  0.40078876,  0.40335025,  0.40702841,  0.41194375,
    0.41818517,  0.42580846,  0.43483499,  0.44525116,  0.45700891,
    0.4700276 ,  0.48419736,  0.49938363,  0.51543283,  0.53217868,
    0.54944865,  0.56707028,  0.58487678,  0.60271173,  0.62043267,
    0.63791355,  0.65504607,  0.67174007,  0.6879231 ,  0.70353938,
    0.71854842,  0.73292329,  0.74664884,  0.75971994,  0.77213972,
    0.783918  ,  0.79506992,  0.80561461,  0.81557416,  0.82497273,
    0.83383575,  0.84218935,  0.85005984,  0.85747334,  0.86445547,
    0.87103113,  0.87722433,  0.88305811,  0.88855443,  0.89373415,
    0.898617  ,  0.90322162,  0.90756555,  0.91166525,  0.91553618])
In [96]: out2
Out[96]: 
array([ 0.31626381,  0.31638513,  0.31667084,  0.31721226,  0.31811294,
    0.31948646,  0.32145416,  0.32414259,  0.32768059,  0.33219587,
    0.33781106,  0.34463926,  0.35277915,  0.36230989,  0.37328607,
    0.38573305,  0.39964318,  0.41497335,  0.43164433,  0.449542  ,
    0.46852083,  0.48840914,  0.50901598,  0.53013886,  0.55157189,
    0.57311338,  0.59457264,  0.61577537,  0.63656761,  0.65681803,
    0.6764189 ,  0.69528578,  0.71335626,  0.73058811,  0.74695691,
    0.76245356,  0.77708177,  0.79085565,  0.80379747,  0.81593569,
    0.82730323,  0.83793606,  0.84787193,  0.85714946,  0.86580729,
    0.87388357,  0.88141541,  0.88843862,  0.89498747,  0.90109452])
In [97]: out3
Out[97]: 
array([ 0.6325231 ,  0.63424383,  0.63647521,  0.63916579,  0.64227168,
    0.64575317,  0.64957324,  0.65369686,  0.65809065,  0.6627228 ,
    0.66756296,  0.67258231,  0.67775356,  0.68305097,  0.68845041,
    0.69392934,  0.69946681,  0.70504349,  0.71064159,  0.71624488,
    0.72183859,  0.72740939,  0.7329453 ,  0.73843566,  0.74387099,
    0.749243  ,  0.75454444,  0.75976907,  0.76491154,  0.76996738,
    0.77493287,  0.77980499,  0.78458137,  0.78926022,  0.79384025,
    0.79832065,  0.80270103,  0.80698134,  0.81116187,  0.81524321,
    0.81922618,  0.82311181,  0.82690134,  0.83059613,  0.83419771,
    0.83770771,  0.84112783,  0.84445988,  0.84770571,  0.8508672 ])

对不起所有的输出。无论如何,问题是,“添加”这些曲线的正确技术是什么?我正在寻找平均测量与半径曲线(带有误差线),我不完全确定这对于不同系统的不同径向测量意味着什么。我的第一个想法是在对象 1 的值之间进行插值,并在对象 2 和 3 的位置评估它们,以便可以在相同的基础上评估它们。但是,我可能有数千个这样的对象,这不喜欢为那么多对象做正确的事情(另外,这也带来了我的插值方法——三次、线性等)。任何想法,将不胜感激!让我知道是否需要进一步澄清。谢谢!

1个回答

是的,插值通常是你最好的选择。有三种主要的方法可以将它们加在一起,但它们只适用于某些上下文。

  1. 将插值函数加在一起:假设您可以将结果拟合为连续,则可以得到平均值但是使用这种方法,你必须假设原始函数是平滑的(并且误差很小),这样你才能进行插值。可以通过类似的方式找到错误。通过浏览您的数据,我认为情况就是如此。fi(ri)f(r)=1ninfi(r)fi

  2. 合并所有数据点:将 x 个数据点合并在一起,将 y 个数据点合并在一起,即如果它们实际上是同一个对象/同一个集合的结果,并且有很大的错误,那么它就可以工作。由于它们代表相同的想法,因此您实际上不需要取平均值,并且它适用于非常少量的样本。此外,您可以为这些高噪声数据添加简单的拟合曲线。union(ri)union(fi)

  3. 使用分箱平均值:如果您有大量数据系列(您提到),一个简单的方法是使用分箱平均值。例如,bin 可以是,然后将相应的数据点放入每个 bin。对于每个 bin,您可以获取数据点的平均值和方差。如果你有大量数据点并且它们属于同一个集合,这通常会给你最好的平滑结果并有很好的误差估计。r=[0.05,0.15,...,0.95]

对于您提供的有限信息,我建议您使用最后一种方法。