2017-06-21 65 views
0

我試圖從netCDF4文件中提取數據。這些包含作爲Numpy庫的一部分的「MaskedArrays」。在Numpys Masked陣列中獲取非屏蔽值

我的數據包括:緯度經度(在不同的文件分開)。 此外還有一個掩碼,顯示哪些緯度/經度因各種原因(無測量或其他原因)無效。

我的數據看起來像這樣(的屏蔽數據):

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

我在尋找一個numpy的方法(或類似),其只能提取未屏蔽這些值。理想情況下,只需從數據集中刪除所有無效的條目。 我發現.compressed,但它給了一維數組。從第三維來看,這是相當多的信息損失,因爲我不知道這些值在哪裏。

另外我試過nonzero = the_array['one of the values'][0].nonzero()。 這給了我一個雙數組的經緯度值,但之後,我仍然需要訪問這些 - 這是很慢的。不幸的是,在知道如何訪問所有這些日期之後,我需要在每個具有〜1500×700×365數據點的30 * 6個文件上執行此操作:D。

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-valid-entries)上檢查了此概述? –

+0

壓縮的返回1d,因爲每行或列的數值不一致。填充是「去除」蒙版值的另一種方式。 – hpaulj

回答

0

要獲得蟒蛇非屏蔽的數據,你可以使用'.mask」工具

假設你有以下數據集:

數據= [0.0 1.0 - - ] [2.0 3.0 - - ]]

通過data.mask命令獲取'False'的所有索引時,可以獲取非屏蔽數據。

數據=數據[data.mask == FALSE]

注意,這將會給你所有的輸入的一維陣列

數據 - > [0.0 1.0 2.0 3.0]