[英]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.