# N维数据集 (astropy.nddata ）¶

## 入门¶

### NDData¶

NDData 对象可以通过传递n维来实例化 numpy 数组：：

>>> import numpy as np
>>> from astropy.nddata import NDData
>>> array = np.zeros((12, 12, 12))  # a 3-dimensional array with all zeros
>>> ndd1 = NDData(array)


>>> ndd2 = NDData([1, 2, 3, 4])
>>> ndd2
NDData([1, 2, 3, 4])


>>> ndd2.data
array([1, 2, 3, 4])


>>> data = np.array([1,2,3,4])
>>> mask = data > 2
>>> unit = 'erg / s'
>>> from astropy.nddata import StdDevUncertainty
>>> uncertainty = StdDevUncertainty(np.sqrt(data)) # representing standard deviation
>>> meta = {'object': 'fictional data.'}
...              meta=meta)
>>> ndd
NDData([1, 2, 3, 4])


### NDDataRef¶

• A readwrite 访问方法 astropy 的统一文件I/O接口。

• 简单的算术，如加法、减法、除法和乘法。

• 切片。

>>> from astropy.nddata import NDDataRef
>>> ndd = NDDataRef(ndd)
>>> ndd
NDDataRef([1, 2, 3, 4])


>>> import astropy.units as u
>>> ndd2 = ndd.add([4, -3.5, 3, 2.5] * u.erg / u.s)
>>> ndd2
NDDataRef([ 5. , -1.5,  6. ,  6.5])


>>> ndd2[2:]  # discard the first two elements
NDDataRef([6. , 6.5])
>>> ndd2[1]   # get the second element
NDDataRef(-1.5)


### 处理像图像这样的二维数据¶

#### 实例¶

>>> import numpy as np
>>> from astropy.modeling.models import Gaussian2D
>>> y, x = np.mgrid[0:500, 0:600]
>>> data = (Gaussian2D(1, 150, 100, 20, 10, theta=0.5)(x, y) +
...         Gaussian2D(0.5, 400, 300, 8, 12, theta=1.2)(x,y) +
...         Gaussian2D(0.75, 250, 400, 5, 7, theta=0.23)(x,y) +
...         Gaussian2D(0.9, 525, 150, 3, 3)(x,y) +
...         Gaussian2D(0.6, 200, 225, 3, 3)(x,y))
>>> data += 0.01 * np.random.randn(500, 600)
>>> cosmic_ray_value = 0.997
>>> data[100, 300:310] = cosmic_ray_value


>>> import matplotlib.pyplot as plt
>>> plt.imshow(data, origin='lower')


(png _, svgpdf

“宇宙射线”可以在这个测试图像中被屏蔽掉，就像这样：

>>> mask = (data == cosmic_ray_value)


### CCDData 图像类¶

>>> from astropy.nddata import CCDData
...               meta={'object': 'fake galaxy', 'filter': 'R'},


### 切片¶

>>> ccd2 = ccd[:200, :]
>>> ccd2.data.shape
(200, 600)
(200, 600)
>>> # Show the mask in a region around the cosmic ray:
array([[False, False, False, False, False, False, False, False, False,
False, False, False],
[False,  True,  True,  True,  True,  True,  True,  True,  True,
True,  True, False],
[False, False, False, False, False, False, False, False, False,
False, False, False]]...)


### 图像算法，包括不确定性¶

#### 实例¶

>>> from astropy.nddata import VarianceUncertainty
>>> poisson_noise = np.ma.sqrt(np.ma.abs(ccd.data))
>>> ccd.uncertainty = VarianceUncertainty(poisson_noise ** 2)


>>> ccd.uncertainty = poisson_noise
INFO: array provided for uncertainty; assuming it is a StdDevUncertainty. [astropy.nddata.ccddata]


>>> ccd2 = ccd.copy()
>>> added_ccds.uncertainty.array[0, 0] / ccd.uncertainty.array[0, 0] / np.sqrt(2)
0.99999999999999989


### 阅读与写作¶

A CCDData 可以保存到FITS文件：

>>> ccd.write('test_file.fits')


>>> ccd2 = CCDData.read('test_file.fits')


>>> CCDData.read.help('fits')  # Get help on the CCDData FITS reader
>>> CCDData.writer.help('fits')  # Get help on the CCDData FITS writer


### 图像实用程序¶

#### 切口¶

##### 实例¶

>>> from astropy.nddata import Cutout2D
>>> position = (149.7, 100.1)
>>> size = (81, 101)     # pixels
>>> cutout = Cutout2D(ccd, position, size)
>>> plt.imshow(cutout.data, origin='lower')


(png _, svgpdf

>>> plt.imshow(ccd, origin='lower')
>>> cutout.plot_on_original(color='white')


(png _, svgpdf

cutout还提供了在原始或剪切中查找像素坐标的方法；回想一下 position 是原始图像中切口的中心：

>>> position
(149.7, 100.1)
>>> cutout.to_cutout_position(position)
(49.7, 40.099999999999994)
>>> cutout.to_original_position((49.7, 40.099999999999994))
(149.7, 100.1)


#### 调整图像大小¶

##### 例子¶

>>> from astropy.nddata import block_reduce, block_replicate
>>> smaller = block_reduce(ccd, 4)
>>> smaller
array(...)
>>> plt.imshow(smaller, origin='lower')


(png _, svgpdf

### 其他图像类¶

• NDDataRef 可以切片，并具有用于基本算术运算的方法，但用户需要使用其中一个不确定类来定义不确定性。看到了吗 NDDataRef 更多细节。它的大多数属性必须在创建对象时设置，因为它们是不可变的。

• NDDataArray 延伸 NDDataRef 通过添加使其行为类似于 numpy 数组，并为多个属性添加setter。它缺乏自动识别和读取FITS文件中数据的能力，也不尝试自动设置WCS属性。

• CCDData 延伸 NDDataArray 通过设置默认的不确定性类，设置对FITS文件的直接读/写，并自动设置WCS属性。

### 更一般的网格数据类¶

nddata 包，主要是用户感兴趣的，这些用户要么需要一个超出目前讨论的类的自定义图像类，要么使用不是图像的网格数据。

## 参考/API¶

### astropy.nddata 包¶

#### 功能¶

 add_array 大数组，U 在大数组中的给定位置添加一个较小的数组。 bitfield_to_boolean_mask \（位域[, ...] ） 根据从提供的位标志构造的位掩码，将位字段数组转换为布尔（或整数）掩码数组（请参阅 ignore_flags 参数）。 block_reduce \（数据，块大小[, func] ） 通过对本地块应用函数对数据数组进行降采样。 block_replicate \（数据，块大小[, conserve_sum] ） 逐块向上采样数据阵列复制。 extend_bit_flag_map \（clsu名称[, base_cls] ） 一个方便的函数，用于通过子类化现有映射和添加作为关键字参数提供的附加标志来创建位标志映射。 extract_array \（数组大，形状，位置） 从较大的数组中提取给定形状和位置的较小数组。 fits_ccddata_reader （文件名） [, hdu, unit, ...] ） 从FITS文件生成CCDData对象。 fits_ccddata_writer \（ccd\数据，文件名[, ...] ） 将CCDData对象写入FITS文件。 interpret_bit_flags \（位标志[, flip_bits, ...] ） 将输入位标志转换为单个整数值（位掩码）或 None . overlap_slices \（大数组形状[, mode] ） 获取小数组和大数组重叠部分的切片。 reshape_as_blocks \（数据，块大小） 将数据数组整形为块。 subpixel_indices \（位置，子采样） 在给定子采样因子的情况下，将小数点转换为索引。 support_nddata \ [_func, accepts, repack, ...] ） Decorator包装可以接受NDData实例的函数，其属性作为函数参数传递。

#### Classes¶

 位标志名映射的一个基类，用于通过提供从助记标志名到标志值的映射来描述图像的数据质量（DQ）标志。 CCDData * ARGs， *  * 科威特第纳尔） 描述基本CCD数据的类。 的配置参数 astropy.nddata . Cutout2D \（数据，位置，大小[, wcs, mode, ...] ） 从二维阵列创建剪切对象。 FlagCollection * ARGs， *  * 克瓦格斯） 此类的目的是提供一个字典，用于包含 NDData 班级。 此异常应用于指示两个不同类别的不确定性不能传播的情况。 指示值不是2的幂的整数。 InverseVariance \ [array, copy, unit] ） 逆方差不确定性假设一阶高斯误差传播。 此异常应用于指示不确定性实例尚未与父级关联 NDData 对象。 Mixin类将算术添加到NDData对象。 NDData [数据] [, uncertainty, mask, wcs, meta, ...] ） 集装箱 numpy.ndarray -基于数据集，使用 NDDataBase 接口。 NDDataArray \（数据， * ARGs [, flags] ） 安 NDData 有算术的对象。 基元类，它定义具有在中使用的关联元信息的N维数据集的接口 astropy . NDDataRef [数据] [, uncertainty, mask, wcs, ...] ） 器具 NDData 所有的混音。 Mixin类将NDData连接到astropy输入/输出注册表。 Mixin提供对象切片，使用 NDData 接口。 NDUncertainty \ [array, copy, unit] ） 这是与一起使用的不确定类的元类 NDData . 在确定非重叠数组的重叠时引发。 当数组仅部分重叠时引发。 StdDevUncertainty \ [array, copy, unit] ） 假设一阶高斯误差传播的标准差不确定度。 UnknownUncertainty \ [array, copy, unit] ） 此类实现任何未知的不确定性类型。 VarianceUncertainty \ [array, copy, unit] ） 方差不确定性假设一阶高斯误差传播。

#### 功能¶

 bitfield_to_boolean_mask \（位域[, ...] ） 根据从提供的位标志构造的位掩码，将位字段数组转换为布尔（或整数）掩码数组（请参阅 ignore_flags 参数）。 interpret_bit_flags \（位标志[, flip_bits, ...] ） 将输入位标志转换为单个整数值（位掩码）或 None . extend_bit_flag_map \（clsu名称[, base_cls] ） 一个方便的函数，用于通过子类化现有映射和添加作为关键字参数提供的附加标志来创建位标志映射。

#### Classes¶

 位标志名映射的一个基类，用于通过提供从助记标志名到标志值的映射来描述图像的数据质量（DQ）标志。 指示值不是2的幂的整数。

### astropy.nddata.utils模块¶

#### 功能¶

 extract_array \（数组大，形状，位置） 从较大的数组中提取给定形状和位置的较小数组。 add_array 大数组，U 在大数组中的给定位置添加一个较小的数组。 subpixel_indices \（位置，子采样） 在给定子采样因子的情况下，将小数点转换为索引。 overlap_slices \（大数组形状[, mode] ） 获取小数组和大数组重叠部分的切片。

#### Classes¶

 在确定非重叠数组的重叠时引发。 当数组仅部分重叠时引发。 Cutout2D \（数据，位置，大小[, wcs, mode, ...] ） 从二维阵列创建剪切对象。