NDDataに対してスライスとインデックスを行う

序言:序言

このページは処理のみに適用される NDData-like classes. For a tutorial about slicing/indexing see the python documentation そして numpy documentation それがそうです。

警告

NDData そして NDDataRef 属性にはほとんど制限がありませんので、少し起こる可能性があります 有効だが異常だ 属性の組み合わせはいつもIndexErrorや不正確な結果をもたらす。この場合は、参照されたい 子類化 特定の属性にどのようにスライスをカスタマイズするかに関する情報.

スライスNDDataRef

似ていない NDData このクラスは NDDataRef スライスやインデックスを実現する.その結果,スライスオブジェクトと同じクラスに包装した.

1つの要素を得る:

>>> import numpy as np
>>> from astropy.nddata import NDDataRef

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

元のファイルのスライス部分を取得する:

>>> ndd[1:3]  # Get element 1 (inclusive) to 3 (exclusive)
NDDataRef([2, 3])

これは引用に戻ります 複製品ではない )したがって、スライスを変更することは、元の属性に影響を与えます:

>>> ndd_sliced = ndd[1:3]
>>> ndd_sliced.data[0] = 5
>>> ndd_sliced
NDDataRef([5, 3])
>>> ndd
NDDataRef([1, 5, 3, 4])

しかし、インデックス付けされた要素は1つだけ影響を受ける(例えば、 ndd_sliced = ndd[1] )である。この要素はスカラーであり、変更は元の要素に伝播されない。

属性を含むNDDataRefスライス

この場合もし mask あるいは、あるいは uncertainty この属性もスライスされる:

>>> from astropy.nddata import StdDevUncertainty
>>> data = np.array([1, 2, 3, 4])
>>> mask = data > 2
>>> uncertainty = StdDevUncertainty(np.sqrt(data))
>>> ndd = NDDataRef(data, mask=mask, uncertainty=uncertainty)
>>> ndd_sliced = ndd[1:3]

>>> ndd_sliced.data
array([2, 3])

>>> ndd_sliced.mask
array([False,  True]...)

>>> ndd_sliced.uncertainty  
StdDevUncertainty([1.41421356, 1.73205081])

unit そして meta しかし、影響を受けないだろう。

属性が設定されているが、スライスが実現されていない場合には、情報が印刷され、属性はそのままである。

>>> data = np.array([1, 2, 3, 4])
>>> mask = False
>>> uncertainty = StdDevUncertainty(0)
>>> ndd = NDDataRef(data, mask=mask, uncertainty=uncertainty)
>>> ndd_sliced = ndd[1:3]
INFO: uncertainty cannot be sliced. [astropy.nddata.mixins.ndslicing]
INFO: mask cannot be sliced. [astropy.nddata.mixins.ndslicing]

>>> ndd_sliced.mask
False

NDDataを世界座標を用いてスライスする

もし wcs 実現しなければなりません BaseLowLevelWCS あるいは…。 BaseHighLevelWCS それがそうです。これは、ステップのない整数スライスまたは範囲スライスのみをサポートすることを意味する。このようなスライスは [::10] そうでなければ,配列やブールに基づくスライスは機能しない.

1つスライスするなら NDData 呼び出しの対象 ndd WCSがない場合、WCSを NDData オブジェクト,メソッドは以下の命令を実行する.

>>> ndd.wcs = None

マスクデータの削除

警告

もし wcs この遺言が設定されているかどうか NOT 可能性はあります。しかしWCS属性を None 使用 ndd.wcs = None スライスする前に。

慣例によれば mask 属性指示点が有効であるか無効であるか.したがって,マスクを用いてスライスを行うことで,すべての有効なデータ点を得ることができる.

実例.

マスクスライスを使用してすべての有効なデータ点を取得するためには、以下の操作を実行してください。

>>> data = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> mask = np.array([[0,1,0],[1,1,1],[0,0,1]], dtype=bool)
>>> uncertainty = StdDevUncertainty(np.sqrt(data))
>>> ndd = NDDataRef(data, mask=mask, uncertainty=uncertainty)
>>> # don't forget that ~ or you'll get the invalid points
>>> ndd_sliced = ndd[~ndd.mask]
>>> ndd_sliced
NDDataRef([1, 3, 7, 8])

>>> ndd_sliced.mask
array([False, False, False, False]...)

>>> ndd_sliced.uncertainty  
StdDevUncertainty([1.        , 1.73205081, 2.64575131, 2.82842712])

全ての無効点:

>>> ndd_sliced = ndd[ndd.mask] # without the ~ now!
>>> ndd_sliced
NDDataRef([2, 4, 5, 6, 9])

>>> ndd_sliced.mask
array([ True,  True,  True,  True,  True]...)

>>> ndd_sliced.uncertainty  
StdDevUncertainty([1.41421356, 2.        , 2.23606798, 2.44948974, 3.        ])

注釈

このような索引(ブール索引)の結果はいつも1次元だ!