2017-06-21 15 views
0

netCDF4ファイルからデータを抽出しようとしています。これらには、Numpyライブラリの一部である "MaskedArrays"が含まれています。Numpysマスクされた配列で非マスク値を取得

マイデータは含ま:緯度経度(異なるファイル上に分離します)。 さらに、さまざまな理由(測定やその他の理由なし)で有効でない緯度/経度を示すマスク。

私のデータは、(マスクされたデータのための)次のようになります。私はマスクされていないだけで、これらの値を抽出することができnumpyの方法(または類似)、を探してる

masked_array(
    data = 
    [[[-- -- -- ..., -- -- --] 
     ..., 
     [-- -- -- ..., -- -- --]]], 
    mask = 
    [[[ True True True ..., True True True] 
     ..., 
     [ True True True ..., True True True]]], 
    fill_value = 32767) 

。理想的には、すべての有効でないエントリをデータセットから切り取るだけです。 私は.compressedを見つけましたが、1次元の配列を戻します。 3次元からは、これらの値がどこにあるか分かりませんが、これはかなりの情報損失です。

さらに、nonzero = the_array['one of the values'][0].nonzero()を試しました。 これは私に緯度/経度値のdouble配列を与えますが、それ以降はこれらにアクセスする必要があります。これは遅いです。残念なことに、このすべての日付にアクセスする方法を知った後、〜1500×700×365のデータポイントを持つ30 * 6ファイルでそれを行う必要があります。

all_days = [(x, rhstmax['stuff'][x][24][1288]) for x in range(366)] 
# represents just for lat:24,lon:1288 all days. First 20: 
all_days[:20] = 
    [(0, 15.799999), 
    (1, 16.199999), 
    (2, 17.4), 
    (3, 13.2), 
    (4, 10.8), 
    (5, 11.3), 
    (6, 15.299999), 
    (7, 16.299999), 
    (8, 14.099999), 
    (9, 10.8), 
    (10, 9.5), 
    (11, 9.0999994), 
    (12, 11.9), 
    (13, 9.1999998), 
    (14, 31.0), 
    (15, 49.0), 
    (16, 8.6999998), 
    (17, 10.0), 
    (18, 44.099998), 
    (19, 30.699999)] 
# ... takes forever :(
+0

をすべての有効でないエントリを切り捨てた後の出力の構造はどうなりますか?この概要を[有効なエントリのみにアクセスする](https://docs.scipy.org/doc/numpy/reference/maskedarray.generic.html#accessing-only-the-validentent)で確認しましたか? –

+0

圧縮された行または列の数値が一貫していないため、1dが返されます。塗りつぶしは、マスクされた値を「削除する」別の方法です。 – hpaulj

答えて

0

pythonで非マスクデータを取得するには、 `.mask」ツールを使用することができます

では、次のデータセットがあるとします。

データ= [[0.0 1.0 - - ] [2.0 3.0 - - ]

data.maskコマンドですべてのインデックスを 'False'にすると、マスクされていないデータを取得できます。

データこれはあなたのすべての入力

データの1Dアレイを与えること=データ[data.mask == FALSE]

注 - 理想的には> 0.0 1.0 2.0 3.0]

関連する問題