2017-07-16 8 views
1

機械学習プロセス用の小さなキューブにxarraysを切り詰め、データなしの値でキューブをフィルタリングしようとしています。python xarrayデータセットに値が存在するかどうかをチェック

私はメモリフットプリントを小さくしておきたいと思いますし、データ値がない場合は-999の値を割り当てています。 -999はxarray.Datasetに存在するかどうかをチェックするための最良の方法は何ですか:これは物事を保つint16代わりのnan

質問のための大きなタイプを必要とするために行われていますか?ここで

は私が持っているものです。

(dataset == -999).any() 

はyeildます:私はそうvar_aのようなものを選択しなければならないでしょう

<xarray.Dataset> 
Dimensions: () 
Data variables: 
    var_a  bool True 
    var_b  bool True 
    var_c  bool False 

た後。私のコードは次のように見て終わるだろう:それはXarraysに来るとき

def is_clean(dataset): 
    return (dataset == -999).any().var_a is True 

は、たぶん私はまだ新鮮だけど、私はドキュメントでこれを行うためのよりよい方法を見つけることができません。 xarraysに関する構造的知識の何ビットかが私には分かりませんが、私の現在の解決策で私が大丈夫にならないようにしていますか?何かヒント?

+0

'return(dataset.var_a == -999).any()'? –

+0

お返事ありがとうございます。私の問題は 'return(dataset.var_a == -999).any()'はブール値ではなく 'xr.Dataset'を返すということです。 – Conic

+0

返される 'xr.Dataset'の次元は何ですか? –

答えて

3

xarrayオブジェクトの式は、通常、同じタイプの新しいxarrayオブジェクトを返します。これは、(dataset.var_a == -999).any()の結果がスカラーであることを意味しますxarray.DataArrayオブジェクトです。

スカラーNumPy配列と同様に、scalar DataArrayオブジェクトは、bool()またはfloat()のような組み込み型を呼び出して受信ボックスに入れることができます。これは例えば暗黙的にifステートメントの条件内で発生します。また、NumPy配列のように、.item()メソッドを使って任意のdtypeのスカラーDataArrayをunboxすることができます。

データセット内のすべてのデータ変数を確認するには、あなたが

def is_clean(dataset): 
    return all((v != -999).all() for v in dataset.data_vars.values()) 

それとも、呼び出すことによって、単一DataArrayにデータセット全体を変換することができ、例えば、アクセスのような辞書を使用してデータセットを反復処理する必要がありますどちらか.to_array()、例えば、

def is_clean(dataset): 
    return bool(dataset.to_array() != -999).all()) 

過剰メモリの使用状況を避けるために、あなたがあまりにも悪い少し長いですが、ないている、減少後、アレイに変換することがあります

def is_clean(dataset): 
    return bool((dataset != -999).all().to_array().all()) 
+0

この素晴らしい答えをありがとう。これは、私がパンダ/ナンディを学んだことを考えれば、私の期待でした。私はxarrayをインストールし、いくつかのことを学ぶべきだと思います。 –

関連する問題