天体统计工具 (astropy.stats#

介绍#

这个 astropy.stats package holds statistical functions or algorithms used in astronomy. While the scipy.stats and statsmodels 软件包包含广泛的统计工具,它们是通用的软件包,缺少一些对天文学特别有用或特定的工具。此程序包旨在提供此类功能,但是 not 要替换 scipy.stats 如果它的实施能满足天文学家的需要。

入门#

stats包中包含许多不同的工具,可以通过导入它们来访问它们:

>>> from astropy import stats

下面提供了不同工具的完整列表。有关它们的不同用法,请参阅文档。例如,sigma裁剪是估计图像背景的常用方法,可以使用 sigma_clip() 功能。默认情况下,该函数返回掩码数组,这是一种用于处理丢失或无效条目的Numpy数组类型。掩码数组保留原始数据,但也存储另一个形状相同的布尔数组,其中 True 指示该值被屏蔽。大多数块状泛函将理解掩码数组,并适当地处理它们。例如,考虑以下具有明显异常值的数据集:

>>> import numpy as np
>>> from astropy.stats import sigma_clip
>>> x = np.array([1, 0, 0, 1, 99, 0, 0, 1, 0])

平均值受到异常值的影响::

>>> x.mean()
11.333333333333334

Sigma-Clip(默认情况下为3 Sigma)返回掩码数组,因此函数如下 mean 将忽略离群值::

>>> clipped = sigma_clip(x)
>>> clipped
masked_array(data=[1, 0, 0, 1, --, 0, 0, 1, 0],
             mask=[False, False, False, False,  True, False, False, False,
                   False],
       fill_value=999999)
>>> clipped.mean()
0.375

如果需要直接访问原始数据,可以使用 data 财产。结合了 mask 属性,则可以获取原始异常值或未剪裁的值:

>>> outliers = clipped.data[clipped.mask]
>>> outliers
array([99])
>>> valid = clipped.data[~clipped.mask]
>>> valid
array([1, 0, 0, 1, 0, 0, 1, 0])

有关掩码数组的更多信息,包括 numpy.ma module

实例#

要估计图像的背景:

>>> data = [1, 5, 6, 8, 100, 5, 3, 2]
>>> data_clipped = stats.sigma_clip(data, sigma=2, maxiters=5)
>>> data_clipped
masked_array(data=[1, 5, 6, 8, --, 5, 3, 2],
             mask=[False, False, False, False,  True, False, False, False],
       fill_value=999999)
>>> np.mean(data_clipped)  
4.285714285714286

或者, SigmaClip 类为sigma剪辑提供面向对象的接口,该接口在默认情况下还返回一个屏蔽数组:

>>> sigclip = stats.SigmaClip(sigma=2, maxiters=5)
>>> sigclip(data)
masked_array(data=[1, 5, 6, 8, --, 5, 3, 2],
             mask=[False, False, False, False,  True, False, False, False],
       fill_value=999999)

此外,还有几个方便函数,使统计的计算更加方便。例如, sigma_clipped_stats() 将返回sigma剪裁数组的平均值、中值和标准差:

>>> stats.sigma_clipped_stats(data, sigma=2, maxiters=5)  
(4.2857142857142856, 5.0, 2.2497165354319457)

也有计算工具 robust statistics ,采样数据, circular statistics ,置信限,空间统计和自适应直方图。

大多数工具都是相当自包含的,并且在其docstring中包含相关的示例。

使用 astropy.stats#

有关使用该软件包的更多详细信息,请参见下文。

常量#

这个 astropy.stats 软件包定义了两个用于转换高斯-西格玛和半最大全宽(FWHM)的常数:

gaussian_sigma_to_fwhm#

乘以高斯1-西格玛标准差以将其转换为半最大全宽(FWHM)的系数。

>>> from astropy.stats import gaussian_sigma_to_fwhm
>>> gaussian_sigma_to_fwhm  
2.3548200450309493
gaussian_fwhm_to_sigma#

将高斯全宽乘以半最大值(FWHM)以将其转换为1西格玛标准差的系数。

>>> from astropy.stats import gaussian_fwhm_to_sigma
>>> gaussian_fwhm_to_sigma  
0.42466090014400953

也见#

  • scipy.stats

    这个SciPy包包含各种有用的统计函数和类。中的功能 astropy.stats 是为了补充这一点, not 更换它。

  • statsmodels

    statsmodels包提供用于估计不同统计模型、测试和数据探索的功能。

  • astroML

    astroML包是一个用于机器学习和数据挖掘的Python模块。这个软件包中的一些工具已经迁移到了这里,但是仍然有一些工具对天文学和统计分析有用。

  • astropy.visualization.hist()

    这个 histogram() 在中使用此处定义的例程和相关功能 astropy.visualization.hist() 功能。有关这些确定直方图分块的方法的讨论,请参见 选择直方图箱 .

性能提示#

如果您发现sigma裁剪速度慢,而且您还没有这样做,请考虑安装 bottleneck 包,这将加速一些内部计算。另外,如果您使用的是 cenfunc 和/或 stdfunc 请确保将这些字符串指定为-NumPy,而不是使用-NumPy函数:

>>> sigma_clip(array, cenfunc='median')  

而不是::

>>> sigma_clip(array, cenfunc=np.nanmedian)  

使用字符串将允许sigma裁剪算法选择最快的实现来找到中值。

参考/API#