1 回答
TA貢獻1951條經驗 獲得超3個贊
如果raster是一個數組,
raster == x給出一個布爾掩碼,其形狀與 相同raster,指示 的哪些元素(在您的情況下為像素)raster等于xnp.where(arr)arr給出計算結果為 true的數組元素的索引.np.where(raster == x), 因此, 給出像素的索引raster等于x.np.any(arr)當且僅當 的至少一個元素的arr計算結果為 true 時才返回 True。np.any(raster == x),因此,告訴您是否至少有一個像素raster是 x。
假設fvc和toaRef_red具有相同的形狀并且您想創建一個新emiss的發射數組,如果fvc為 1,則將其設置為 0.99,0.979 - 0.046 * toaRef_red如果fvc為 0,0.971 * (1 - fvc) + 0.987 * fvc如果 0 < fvc< 1,否則為 NaN,您可以執行以下操作:
emiss = np.full(ndvi.shape, np.nan) # create new array filled with nan
emiss[fvc == 1] = 0.99
mask = fvc == 0
emiss[mask] = 0.979 - 0.046 * toaRef_red[mask]
mask = (fvc > 0) & (fvc < 1)
emiss[mask] = 0.971 * (1 - fvc[mask]) + 0.987 * fvc[mask]
這與以下內容相同:
emiss = np.full(ndvi.shape, np.nan) # create new array filled with nan
emiss[np.where(fvc == 1)] = 0.99
idx = np.where(fvc == 0)
emiss[idx] = 0.979 - 0.046 * toaRef_red[idx]
idx = np.where((fvc > 0) & (fvc < 1))
emiss[idx] = 0.971 * (1 - fvc[idx]) + 0.987 * fvc[idx]
后者顯然是多余的。你不需要np.where這里。
添加回答
舉報
