天体统计工具 (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裁剪算法选择最快的实现来找到中值。