1 回答
TA贡献1951条经验 获得超3个赞
如果raster
是一个数组,
raster == x
给出一个布尔掩码,其形状与 相同raster
,指示 的哪些元素(在您的情况下为像素)raster
等于x
np.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这里。
添加回答
举报