第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

有沒有辦法將 numpy.where() 用于將 NaN 值作為無數(shù)據(jù)的柵格數(shù)據(jù)?

有沒有辦法將 numpy.where() 用于將 NaN 值作為無數(shù)據(jù)的柵格數(shù)據(jù)?

紅顏莎娜 2022-10-25 10:33:24
我有一個(gè)柵格數(shù)據(jù),其中包含 NaN 值作為無數(shù)據(jù)。我想從中計(jì)算新的柵格,例如 if raster==0 do statement1,if raster==1 do statement2,如果 raster 介于 0 和 1 之間,則 do statement3,否則不要更改值。如何使用 numpy.where() 函數(shù)來做到這一點(diǎn)?這是我的代碼:import osimport rasteriofrom rasterio import plotimport matplotlib.pyplot as pltimport numpy as np%matplotlib inlineos.listdir('../NDVI_output')ndvi1 = rasterio.open("../NDVI_output/NDVI.tiff")min_value = ndvi_s = np.nanmin(ndvi) #NDVI of Bare soilmax_value = ndvi_v = np.nanmax(ndvi) #NDVI of full vegetation coverfvc = (ndvi-ndvi_s)/(ndvi_v-ndvi_s) #fvc: Fractional Vegetation Coverband4 = rasterio.open('../TOAreflectance_output/TOAref_B4.tiff')toaRef_red = band4.read(1).astype('float64')emiss = np.where((fvc == 1.).any(), 0.99,                 (np.where((fvc == 0.).any(), 0.979-0.046*toaRef_red,                           (np.where((0.<fvc<1.).any(), 0.971*(1-fvc)+0.987*fvc, fvc)))))
查看完整描述

1 回答

?
飲歌長嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

如果raster是一個(gè)數(shù)組,

  • raster == x給出一個(gè)布爾掩碼,其形狀與 相同raster,指示 的哪些元素(在您的情況下為像素)raster等于x

  • np.where(arr)arr給出計(jì)算結(jié)果為 true的數(shù)組元素的索引. np.where(raster == x), 因此, 給出像素的索引raster等于x.

  • np.any(arr)當(dāng)且僅當(dāng) 的至少一個(gè)元素的arr計(jì)算結(jié)果為 true 時(shí)才返回 True。np.any(raster == x),因此,告訴您是否至少有一個(gè)像素raster是 x。

假設(shè)fvctoaRef_red具有相同的形狀并且您想創(chuàng)建一個(gè)新emiss的發(fā)射數(shù)組,如果fvc為 1,則將其設(shè)置為 0.99,0.979 - 0.046 * toaRef_red如果fvc為 0,0.971 * (1 - fvc) + 0.987 * fvc如果 0 < fvc< 1,否則為 NaN,您可以執(zhí)行以下操作:

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]

這與以下內(nèi)容相同:


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這里。


查看完整回答
反對 回復(fù) 2022-10-25
  • 1 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號