簡體   English   中英

屏蔽2D Numpy數組時出錯

[英]Error when masking 2d numpy array

我不確定這里使用的是正確的術語,但是我試圖使用多個數組中的多個條件來屏蔽numpy數組中的某些值。 例如,我要查找並掩蓋X中數組t / l,lat2d,x和m滿足特定條件的區域。 所有數組的形狀相同:(250,500)。 我嘗試了這個:

cs[t < 274.0 | 
   l > 800.0 |
   lat2d > 60 |
   lat2d < -60 | 
   (x > 0 & m > 0.8) |
   (x < -25 & m < 0.2)] = np.nan

輸入類型不支持ufunc'bitwise_and',並且根據強制轉換規則“ safe”,不能將輸入安全地強制轉換為任何受支持的類型。

我替換了&,| 與和/或得到錯誤:

ValueError:具有多個元素的數組的真值不明確。 使用a.any()或a.all()

我嘗試創建蒙版:mask = t <274.0 | l> 800.0 | lat2d> 60 | lat2d <-60 | (x> 0&m> 0.8)| (x <-25&m <0.2),以便在蒙版數組中使用但得到相同的錯誤。

任何想法如何在Python 3中做到這一點?

這只是運算符優先級的問題:

cs[(t < 274.0) | 
   (l > 800.0) |
   (lat2d > 60) |
   (lat2d < -60) |
   ((x > 0) & (m > 0.8)) |
   ((x < -25) & (m < 0.2))] = np.nan

應該管用

您可以使用python函數,然后在數組上應用該函數。

def cond(x):
    if (np.all(t < 274.0) or np.all(l > 800.0) or np.all(lat2d > 60) or \
        np.all(lat2d < -60) or (np.all(x > 0) and np.all(m > 0.8)) or  \
        (np.all(x < -25) and np.all(m < 0.2))):
        return np.nan

然后將此函數應用於數組:

cs[:] = np.apply_along_axis(cond, 0, cs)

暫無
暫無

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

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