用Astropy传播不确定性

时间:2015-12-13 12:39:26

标签: python astropy

在之前的astropy版本中,可以通过以下方式处理不确定性的传播:

from astropy.nddata import NDData, StdDevUncertainty

x = NDData( 16.0, uncertainty=StdDevUncertainty( 4.0 ))
y = NDData( 361.0, uncertainty=StdDevUncertainty( 19.0 ))

print x.add(y)

对NDData的更改似乎已删除此功能。我得到“AttributeError:'NDData'对象没有属性'add'”,我在文档中找不到任何有用的建议。现在如何处理错误传播?

1 个答案:

答案 0 :(得分:3)

看起来此功能已移至mixin,NDArithmeticMixin。

example in the Arithmetic mixin documentation建议创建一个自己的类并使用它。

所以你的例子会变成:

from astropy.nddata import NDData, StdDevUncertainty, NDArithmeticMixin
class MyData(NDData, NDArithmeticMixin):
    pass
x = MyData( 16.0, uncertainty=StdDevUncertainty( 4.0 ))
y = MyData( 361.0, uncertainty=StdDevUncertainty( 19.0 ))
z = x.add(y)
print(z)
print(z.uncertainty.array)

给出:

MyData(377.0)
19.416487838947599

<强>更新

班级NDDataArray实际执行上述班级MyData所做的事情:它包括三个混音(算术,算术和切片)。
这使得上述内容更简单:

from astropy.nddata import StdDevUncertainty, NDDataArray
x = NDDataArray(16, uncertainty=StdDevUncertainty(4.0))
y = NDDataArray(361, uncertainty=StdDevUncertainty(19.0))
z = x.add(y)
print(z)
print(z.uncertainty.array)

我认为这个界面相当笨重。也许它会随着时间的推移而变得清晰,变得像

一样简单
z = x + y
print(z)

377.0 +/- 19.416487838947599