用 Astropy 传播不确定性
Propagation of uncertainties with 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' object has no attribute 'add'",但在文档中找不到任何有用的建议。现在如何处理错误传播?
看起来此功能已移至混合宏 NDArithmeticMixin。
example in the Arithmetic mixin documentation 建议创建自己的 class 并使用它。
因此您的示例将变为:
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
更新
class NDDataArray
实际上做了上面 class MyData
做的事情:它包括三个 mixin(算术、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)
377.0 +/- 19.416487838947599
在以前的 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' object has no attribute 'add'",但在文档中找不到任何有用的建议。现在如何处理错误传播?
看起来此功能已移至混合宏 NDArithmeticMixin。
example in the Arithmetic mixin documentation 建议创建自己的 class 并使用它。
因此您的示例将变为:
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
更新
class NDDataArray
实际上做了上面 class MyData
做的事情:它包括三个 mixin(算术、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)
377.0 +/- 19.416487838947599