NDDataに対してスライスとインデックスを行う¶
序言:序言¶
このページは処理のみに適用される NDData
-like classes. For a tutorial about slicing/indexing see the python documentation そして numpy documentation それがそうです。
スライス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次元だ!