Python 天体测量中不确定性的传播

Python 天体测量中不确定性的传播,python,astropy,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的更改似乎删除了此功能。我得到“Attribute

在以前的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'”,并且在文档中找不到任何有用的建议。错误传播现在是如何处理的?

看起来此功能已移动到mixin,NDArithmeticMixin

他们建议创建自己的类并使用它

所以你的例子是:

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
所执行的操作:它包括三种混合(算术、io和切片)。
这使上述内容变得更简单:

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)


您可能希望查看模块的不确定性完美!非常感谢。它甚至似乎可以处理单位,这比我希望的要多for@TheBigH我发现
NDDataArray
可以满足您的需要,并且不需要创建自己的类。另请参见我答案中的更新。这看起来比不确定因素更笨拙。与不确定性相比,它有什么优势?@MaxNoe所有细节都在这里,但非常简单:NDData允许存储掩码、元数据、不确定性、单位等。因此,它可以做的不仅仅是传播不确定性。@Evert:你可以做的一件事:另外,这个包处理不确定性和单位,如果我没记错的话,它也与NumPy兼容,所以你也可以得到掩码。因此,在我看来,使用Pint只会丢失元数据,并获得正确的计算(相关性)。由于执行正确的计算比较困难,但也可能比较慢。:)
377.0 +/- 19.416487838947599