NDData

概要

NDData それに基づいて numpy.ndarray -似てる data 他のメタ属性を使用する:

  • meta 通常のメタデータでは

  • unit データを表す物理単位

  • uncertainty データに対する不確実性

  • mask 指示データ中の無効点

  • wcs データメッシュと世界座標との関係を表す.

これらの属性の各々は、初期化中に設定されてもよいし、インスタンス上に直接設定されてもよい。ただ…。 data インスタンスを作成した後に直接設定することはできません。

データ.データ

データはデータの基礎である NDData 次のような条件を満たすことが求められています numpy.ndarray -そうだこれはインスタンスを作成するために必要な唯一の属性であり,インスタンス上に直接設定することはできない.

例を引く

インスタンスを作成するには、以下の操作を実行してください。

>>> import numpy as np
>>> from astropy.nddata import NDData
>>> array = np.array([[0, 1, 0], [1, 0, 1], [0, 1, 0]])
>>> ndd = NDData(array)
>>> ndd
NDData([[0, 1, 0],
        [1, 0, 1],
        [0, 1, 0]])

そして…。 data 属性::

>>> ndd.data
array([[0, 1, 0],
       [1, 0, 1],
       [0, 1, 0]])

前述したように、データを直接設定することは不可能である。だから…。 ndd.data = np.arange(9) 異常を引き起こすことになりますしかしその場でデータを修正することができます:

>>> ndd.data[1,1] = 100
>>> ndd.data
array([[  0,   1,   0],
       [  1, 100,   1],
       [  0,   1,   0]])

初期化期間のデータ

初期化中に、そうではないことを提供することができます numpy.ndarray しかし、一台に両替できます。

実例.

提供することができます numpy.ndarray あなたは1つのことを伝えることができます list 含まれる数値:

>>> alist = [1, 2, 3, 4]
>>> ndd = NDData(alist)
>>> ndd.data  # data will be a numpy-array:
array([1, 2, 3, 4])

入れ子の list あるいは…。 tuple 可能であるが、これらの値が非デジタル値を含む場合、変換に失敗する可能性がある。

このような配列に変換可能な入力のほかに,利用可能である. data パラメータは暗黙的付加情報を伝達する.例えばデータが別のものであれば NDData これは、その属性のオブジェクトを暗黙的に使用する:

>>> ndd = NDData(ndd, unit = 'm')
>>> ndd2 = NDData(ndd)
>>> ndd2.data  # It has the same data as ndd
array([1, 2, 3, 4])
>>> ndd2.unit  # but it also has the same unit as ndd
Unit("m")

もう一つの可能性は Quantity 一人として data パラメータ::

>>> import astropy.units as u
>>> quantity = np.ones(3) * u.cm  # this will create a Quantity
>>> ndd3 = NDData(quantity)
>>> ndd3.data  
array([1., 1., 1.])
>>> ndd3.unit
Unit("cm")

あるいは…。 numpy.ma.MaskedArray **

>>> masked_array = np.ma.array([5,10,15], mask=[False, True, False])
>>> ndd4 = NDData(masked_array)
>>> ndd4.data
array([ 5, 10, 15])
>>> ndd4.mask
array([False,  True, False]...)

このような暗黙的送達の属性が明示的パラメータと衝突する場合、明示的パラメータが使用され、INFOメッセージが発行される:

>>> quantity = np.ones(3) * u.cm
>>> ndd6 = NDData(quantity, unit='m')
INFO: overwriting Quantity's current unit with specified unit. [astropy.nddata.nddata]
>>> ndd6.data  
array([1., 1., 1.])
>>> ndd6.unit
Unit("m")

の単位 Quantity 単位は無視され、単位は明示的に伝達される単位に設定される。

It might be possible to pass other classes as a data parameter as long as they have the properties shape, dtype, __getitem__, and __array__.

この機構の目的は、有用なデフォルト値を提供しながら、データを格納するためのオブジェクトにおいてかなりの柔軟性を可能にすることである。 (numpy 配列)。

日除け.

♪the mask データポイントが有効であるか無効であるかを示すために使用される。 NDData このマスクはいかなる方法でも制限されないが,従うべきである numpy.ma.MaskedArray 慣例によれば、仮面:

  • 返品 True 考慮したデータ点 無効 それがそうです。

  • 返品 False 次の点については 効き目がある それがそうです。

実例.

1つの可能な方法は、以下のコマンドを使用してマスクを作成することである numpy 比較演算子:

>>> array = np.array([0, 1, 4, 0, 2])

>>> mask = array == 0  # Mask points containing 0
>>> mask
array([ True, False, False,  True, False]...)

>>> other_mask = array > 1  # Mask points with a value greater than 1
>>> other_mask
array([False, False,  True, False,  True]...)

初期化します NDData 実例的使用 mask パラメータ::

>>> ndd = NDData(array, mask=mask)
>>> ndd.mask
array([ True, False, False,  True, False]...)

マスクを交換することで:

>>> ndd.mask = other_mask
>>> ndd.mask
array([False, False,  True, False,  True]...)

このカバーは実際には要求されていません numpy 配列;例えば、必要に応じてマスク値を計算する関数は、それが従う限り許容可能である。 True 無視すべき値を指示する.

職場.職場.

♪the unit データ値の単位を表す.それが要求されているのは Unit -クラスまたはこのように変換可能 Unit **

>>> import astropy.units as u
>>> ndd = NDData([1, 2, 3, 4], unit="meter")  # using a string
>>> ndd.unit
Unit("m")
.注:

設ける unit 実例的には不可能である.

不確実性

♪the uncertainty データ値の誤りを表す任意の表示形式.どの不確実性表現を使うかを指示するために uncertainty 一つあるはずです。 uncertainty_type 財産です。このような属性が見つからなければ UnknownUncertainty それがそうです。

♪the uncertainty_type 従うべきだ StdDevUncertainty コミットメントは,次のような短い文字列を返すためである "std" 標準偏差で表される不確定度について.他の例には VarianceUncertainty そして InverseVariance それがそうです。

実例.

他の属性と同様に uncertainty 初期化中に設定することができます:

>>> from astropy.nddata import StdDevUncertainty
>>> array = np.array([10, 7, 12, 22])
>>> uncert = StdDevUncertainty(np.sqrt(array))
>>> ndd = NDData(array, uncertainty=uncert)
>>> ndd.uncertainty  
StdDevUncertainty([3.16227766, 2.64575131, 3.46410162, 4.69041576])

または、以下の動作をインスタンス上で直接実行する。

>>> other_uncert = StdDevUncertainty([2,2,2,2])
>>> ndd.uncertainty = other_uncert
>>> ndd.uncertainty
StdDevUncertainty([2, 2, 2, 2])

しかしそうでなければメッセージを印刷します uncertainty_type **

>>> ndd.uncertainty = np.array([5, 1, 2, 10])
INFO: uncertainty should have attribute uncertainty_type. [astropy.nddata.nddata]
>>> ndd.uncertainty
UnknownUncertainty([ 5,  1,  2, 10])

WCS

♪the wcs メッシュデータから世界座標へのマッピングを含むべきである.現在はこの属性に制限はありませんが、それは限られているかもしれません WCS オブジェクトまたはより汎用的なWCSオブジェクト。

注釈

この単位のように wcs インスタンスに設定することはできない.

メタデータ.

♪the meta 属性は,他のどの属性にも適合しない他のすべてのメタ情報を含む.

実例.

もし meta 属性が与えられていれば dict -好き::

>>> ndd = NDData([1,2,3], meta={'observer': 'myself'})
>>> ndd.meta
{'observer': 'myself'}

dict -LIKEは、いくつかのキーからいくつかの値へのマッピングでなければならないことを示します。これには Header 対象::

>>> from astropy.io import fits
>>> header = fits.Header()
>>> header['observer'] = 'Edwin Hubble'
>>> ndd = NDData(np.zeros([10, 10]), meta=header)
>>> ndd.meta['observer']
'Edwin Hubble'

もし meta 属性が提供されていない場合、または明示的に設定 None デフォルトで空になります collections.OrderedDict **

>>> ndd.meta = None
>>> ndd.meta
OrderedDict()

>>> ndd = NDData([1,2,3])
>>> ndd.meta
OrderedDict()

♪the meta したがって、オブジェクトは、以下の値の追加または更新をサポートします。

>>> ndd.meta['exposure_time'] = 340.
>>> ndd.meta['filter'] = 'J'

メタデータ辞書の要素は、任意の有効なPythonオブジェクトに設定することができます:

>>> ndd.meta['history'] = ['calibrated', 'aligned', 'flat-fielded']

コピーを使って初期化する

創立 NDData インスタンスの目的は、コピーとして保存するのではなく、パラメータを元のファイルへの参照として別に保存することを試みることである。内部メカニズムがそうすることを許さないので、時々これは不可能だ。

実例.

もし data これは list そして、初期化中に、 ndarray それがそうです。ただし、初期化中に設定することでもよい copy パラメータが到着する True **

>>> array = np.array([1, 2, 3, 4])
>>> ndd = NDData(array)
>>> ndd.data[2] = 10
>>> array[2]  # Original array has changed
10

>>> ndd2 = NDData(array, copy=True)
>>> ndd2.data[2] = 3
>>> array[2]  # Original array hasn't changed.
10

注釈

場合によっては設定 copy=True 複製します data 二回です。既知の事例は data これは list あるいは…。 tuple それがそうです。

NDDataを他のクラスに変換する

限られた支援だけが NDData インスタンスは他のクラスに追加される.この過程で、いくつかの属性が失われる可能性がある。

>>> data = np.array([1, 2, 3, 4])
>>> mask = np.array([True, False, False, True])
>>> unit = 'm'
>>> ndd = NDData(data, mask=mask, unit=unit)

numpy.ndarray

data 配列:

>>> array = np.asarray(ndd.data)
>>> array
array([1, 2, 3, 4])

使ったけど np.asarray 必要ではなく、ほとんどの場合、それは結果が常にそうであることを確実にするだろう。 numpy.ndarray

numpy.ma.MaskedArray

data そして mask MaskedArrayまで:

>>> masked_array = np.ma.array(ndd.data, mask=ndd.mask)
>>> masked_array
masked_array(data=[--, 2, 3, --],
             mask=[ True, False, False,  True],
       fill_value=999999)

Quantity

data そして unit ある数まで:

>>> quantity = u.Quantity(ndd.data, unit=ndd.unit)
>>> quantity  
<Quantity [1., 2., 3., 4.] m>

注釈

理想的には、あなたはマスクの数を構築しなければなりませんが、これらの数は適切に支持されていません:それらに対する多くの操作が失敗しました。