マスクと欠損値¶
♪the astropy.table
package provides support for masking and missing values in a table by using the numpy.ma
masked array package to define masked columns and by supporting 混合柱 that provide masking. This allows handling tables with missing or invalid entries in much the same manner as for standard (unmasked) tables. It is useful to be familiar with the masked array マスクテーブルを用いた場合の文書 astropy.table
それがそうです。
簡単に言うと,その概念は列データ配列構造を反映したブーリアンマスクを定義することである.マスク値のある位置 True
, the corresponding entry is considered to be missing or invalid. Operations involving column or row access and slicing are unchanged. The key difference is that arithmetic or reduction operations involving columns or column slices follow the rules for operations on masked arrays それがそうです。
重要
中の変更 astropy
4.0
はい。 astropy
4.0シールドシートの動作が変更され、プログラム機能に影響を与える可能性があります。参照してください シールド中の変更 astropy 4.0 もっと細かいことを知っています。
注釈
操作を簡略化して numpy.sum
あるいは…。 numpy.mean
マスク(無効)値を無視する約束に従う.これは浮動小数点の振舞いとは違います NaN
その配列の和は1つ以上を含む NaN's
その結果 NaN
それがそうです。
見 this page NumPy強化推奨24、25、および26に関する情報。
表作成¶
マスクテーブルは、様々な方法で作成することができる。
MaskedColumnオブジェクトとして1つ以上の列を含むテーブルを作成する
>>> from astropy.table import Table, Column, MaskedColumn
>>> a = MaskedColumn([1, 2], name='a', mask=[False, True], dtype='i4')
>>> b = Column([3, 4], name='b', dtype='i8')
>>> Table([a, b])
<Table length=2>
a b
int32 int64
----- -----
1 3
-- 4
♪the MaskedColumn
はい。 Column
クラスは、マスクデータ列を作成して動作させるためのインターフェースを提供する。♪the MaskedColumn
類継承自 numpy.ma.MaskedArray
これとは対照的に Column
それは継承されています numpy.ndarray
それがそうです。この違いは,この2つの場合に異なるカテゴリがある要因である.
表出力中のマスクエントリは以下のとおりであることに注意されたい. --
それがそうです。
Create a table with one or more columns as a ``numpy`` MaskedArray
>>> import numpy as np
>>> a = np.ma.array([1, 2])
>>> b = [3, 4]
>>> t = Table([a, b], names=('a', 'b'))
Create a table from list data containing `numpy.ma.masked`
ご利用いただけます numpy.ma.masked
マスクまたは無効データを示す定数::
>>> a = [1.0, np.ma.masked]
>>> b = [np.ma.masked, 'val']
>>> Table([a, b], names=('a', 'b'))
<Table length=2>
a b
float64 str3
------- ----
1.0 --
-- val
埋め込まれたリストから初期化する numpy.ma.masked
元素の速度比を使用する numpy.ma.array
あるいは…。 MaskedColumn
したがって、性能が問題であれば、可能であれば、あなたは後者の方法を使用しなければならない。
MaskedColumnオブジェクトの既存テーブルへの追加
>>> t = Table([[1, 2]], names=['a'])
>>> b = MaskedColumn([3, 4], mask=[True, False])
>>> t['b'] = b
既存のテーブルに新しい行を追加し、マスクパラメータを指定します
>>> a = Column([1, 2], name='a')
>>> b = Column([3, 4], name='b')
>>> t = Table([a, b])
>>> t.add_row([3, 6], mask=[True, False])
Create a new table object and specify masked=True
もし masked=True
テーブルを作成する際に提供されると、各列が作成されます。 MaskedColumn
そして新しい列は常に MaskedColumn
それがそうです。
>>> Table([(1, 2), (3, 4)], names=('a', 'b'), masked=True, dtype=('i4', 'i8'))
<Table masked=True length=2>
a b
int32 int64
----- -----
1 3
2 4
表の属性に注意してください mask
そして fill_value
テーブルを遮蔽するために利用可能である.
既存のテーブルをマスクテーブルに変換する
>>> t = Table([[1, 2], ['x', 'y']]) # standard (unmasked) table
>>> t = Table(t, masked=True, copy=False) # convert to masked table
この操作は一定時間ごとに Column
至る MaskedColumn
また,後続する任意の追加された列がマスクされることを保証する.
表アクセス¶
データ列、行、および単一の要素にアクセスおよび修正するためのほとんどの標準的な方法は、マスクテーブルにも適用可能である。
2つの微妙な違いがあります Row
インデックステーブルの単行で得られたオブジェクト:
標準表に対しては,このような行が2つ等しいかどうかを比較することができるが,シールド表では,この比較に異常が生じる.
この2つの違いは潜在的なからです numpy.ma.MaskedArray
実施する。
遮蔽と充填¶
この2つは Table
そして MaskedColumn
クラスは、欠落データまたは無効データを動作させるテーブルをサポートするために、属性および方法を提供する。
日除け.¶
列のマスクは mask
属性::
>>> t = Table([(1, 2), (3, 4)], names=('a', 'b'), masked=True)
>>> t['a'].mask = [False, True] # Modify column mask (boolean array)
>>> t['b'].mask = [True, False] # Modify column mask (boolean array)
>>> print(t)
a b
--- ---
1 --
-- 4
ブロックされたエントリは --
表を印刷する時。マスクを列または表レベルで直接見ることができます:
>>> t['a'].mask
array([False, True]...)
>>> t.mask
<Table length=2>
a b
bool bool
----- -----
False True
True False
マスクされた要素のインデックスを取得するためには、次式を使用してください。
>>> t['a'].mask.nonzero()[0]
array([1])
詰め物をする.¶
マスク(すなわち、損失または無効)されたエントリは、指定されたパディング値で置き換えることができる。本例では、 MaskedColumn
覆面の Table
標準に変換されます Column
テーブルでもありますマスクテーブルの列はそれぞれ1つあります fill_value
属性は、その列のデフォルトパディング値を指定する。実際の入れ替え操作を行いますので、ご利用ください filled()
メソッドが呼び出される。デフォルト列をカバーできるオプションのパラメータを採用しています fill_value
属性です。**
>>> t['a'].fill_value = -99
>>> t['b'].fill_value = 33
>>> print(t.filled())
a b
--- ---
1 33
-99 4
>>> print(t['a'].filled())
a
---
1
-99
>>> print(t['a'].filled(999))
a
---
1
999
>>> print(t.filled(1000))
a b
---- ----
1 1000
1000 4
シールド中の変更 astropy
4.0¶
はい。 astropy
4.0行動に変更を導入 Table
これはマスク列の処理に影響を与える.
4.0の前に、1つ以上を含むために MaskedColumn
列に並んで要求する. 間隔を置いて 列はブロックされ,失われたりデータをマスクしたりしない列であっても同様である.これは最初に実現したものです Table
これは1つの numpy
列データであるベースコンテナの構造化配列.以来. astropy
1.0、 Table
対象は列の順序辞書である. (実施の詳細を表にする )であり,かつ列タイプが同質であることは要求されない.
4.0から Table
両者を同時に含むことができる Column
そして MaskedColumn
列は、デフォルトの場合、列タイプは、列毎のデータのみによって決定される。
この変更の詳細は以下の各節で議論する.
注釈
多くのアプリケーションに対して,マスク列データを持つアプリケーションであっても,現在ではデフォルト値を用いることを提案している. Table
異種類の柱タイプの行為を許可する。これは表を作ることを意味します もしなければ 指定 masked
キーワードパラメータ。
この言葉の意味は masked
表属性.¶
♪the Table
対象は一つ持っている masked
新しい列を追加する際の表行を決定する属性
masked=True
:非混合列またはデータは常に変換されるMaskedColumn
また、Mixin列はmask
必要であれば,属性を追加することができる.masked=False
:データの種類や内容に応じて列ごとに追加する.
属性関連の行為。 masked
属性が持つ 未変更 バージョン4.0にあります。変化したのは,4.0から表に含まれている masked=False
おそらく含まれています MaskedColumn
柱です。
重要なのは masked
属性は,どの列のデータも実際にマスクしているかどうかを意味しない.一つのテーブルがあります masked=True
しかし,どのリスト列にもマスク要素はない.バージョン4.0から、マスクに関するより多くの有用な情報を提供する2つの表属性がある:
has_masked_columns
:表の中の少なくとも1つMaskedColumn
縦隊。これは…。 not データ値を実際に遮蔽しているかどうかをチェックする。has_masked_values
:TABLEは、1つまたは複数のマスクされた列データ値を有する。大型テーブルの場合、これは、各列のマスク値をチェックする必要があるので、比較的遅い可能性がある。
バージョン4.0から、用語“シールドテーブル”は、作成されたテーブルを使用するためのより狭く一般的ではない場合を保持すべきである masked=True
それがそうです。多くの場合、テーブルレベルの“マスク”または“キャンセルマスク”は心配されるべきではなく、単一の列に注目されるべきである。
自動的にシールド状態にアップグレードします¶
4.0以前のバージョンでは、追加されています MaskedColumn
マスク要素を有する新しい行を有するものに追加するか masked=False
設定されます masked=True
他の列を自動的に“アップグレード”します多くの場合、他の欄のこのようなアップグレードは不要であり、嫌なことでもある。
4.0から,データに適した列タイプを用いて新しい列を追加する.例えばもし1つが numpy
マスク配列を追加すると,その配列は1つになる. MaskedColumn
しかし他の列には影響を与えません masked
属性は False
それがそうです。
この変更の一般的な意味は read
意志 いつも ありますか masked=False
マスク値を持つ列のみが MaskedColumn
それがそうです。4.0までに、入力テーブルにシールド値があれば、戻るテーブルは masked=True
そしてすべて MaskedColumn
柱です。次節では一例を示す.
4.0までの行動を回復する¶
各既存の列または新たに追加された列をマスクする必要があるコードについては,現在明示的に指定する必要がある. masked=True
表を作成する際に。以前、この表は自動的に使用にアップグレードされました MaskedColumn
この動作は、第1のマスク列を追加した直後にすべての列に対して実行される。このテーブルがすでに存在する場合(例えば、使用中 read
データファイルを読み込むためには、新しいテーブルを作成する必要があります:
>> dat = Table.read('data.fits')
>> dat = Table(dat, masked=True, copy=False) # Convert to masked table
>> dat['new_column'] = [1, 2, 3, 4, 5] # Will be added as a MaskedColumn
ほとんどのアプリケーションにとって、これは必要ではないはずですが、第一選択の習慣の使い方は、次のより明確なバージョンです。
>> dat = Table.read('data.fits')
>> dat['new_column'] = np.ma.MaskedArray([1, 2, 3, 4, 5])