簡體   English   中英

堆疊2D numpy數組以使用nanmean

[英]Stacking 2D numpy arrays to use nanmean

我有兩個數組,我想取每個單元的平均值,但要考慮到NaN。

我的兩個數組是:

In [267]: a = np.array([ [1, 2, np.nan], [np.nan, 5, 6], [np.nan, np.nan, np.nan]])

In [268]: a
Out[268]: 
array([[  1.,   2.,  nan],
       [ nan,   5.,   6.],
       [ nan,  nan,  nan]])

In [269]: b = np.array( [ [2, np.nan, 6], [8, np.nan, 12], [14, 16, np.nan]])

In [270]: b
Out[270]: 
array([[  2.,  nan,   6.],
       [  8.,  nan,  12.],
       [ 14.,  16.,  nan]])

如果我不想考慮NaN,那么我可以這樣做:

In [271]: (a+b)/2
Out[271]: 
array([[ 1.5,  nan,  nan],
       [ nan,  nan,  9. ],
       [ nan,  nan,  nan]])

但是,我需要進行均值計算,以使mean(2.5, nan) == 2.5從而NaN被忽略,除非我有兩個NaN,在這種情況下mean(nan, nan) == nan

因此,我想要得到的結果是:

Out[271]: 
    array([[ 1.5,  2,  6],
           [ 8,  5,  9. ],
           [ 14,  16,  nan]])

scipy.stats.nanmean似乎可以做到這一點。 但是,要做到這一點,我認為我需要正確地堆疊陣列。 我有兩個3 x 3陣列,我想我需要創建一個2 x 3 x 3陣列-是嗎? 我似乎無法設法堆疊這些數組以創建具有這些尺寸的結果-我嘗試了np.dstack以及其他各種技術,但似乎沒有任何效果。

我懷疑自己在做些愚蠢的事情-關於如何解決此問題的任何想法?

您需要在新軸(第三維-軸2)上串聯數組。 然后,您可以在此維度上使用nanmean

In [1]: c = np.concatenate([a[..., None], b[..., None]], axis=2)
In [2]: scipy.stats.nanmean(c, axis=2)
Out[3]: 
array([[  1.5,   2. ,   6. ],
       [  8. ,   5. ,   9. ],
       [ 14. ,  16. ,   nan]])

我使用np.array組合了數組:

>>> c=np.array([a,b])
array([[[  1.,   2.,  nan],
        [ nan,   5.,   6.],
        [ nan,  nan,  nan]],

       [[  2.,  nan,   6.],
        [  8.,  nan,  12.],
        [ 14.,  16.,  nan]]])

>>> scipy.stats.nanmean(c,axis=0)
array([[  1.5,   2. ,   6. ],
       [  8. ,   5. ,   9. ],
       [ 14. ,  16. ,   nan]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM