内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

利用python怎么處理nc數據-創(chuàng)新互聯

這篇文章給大家分享的是有關利用python怎么處理nc數據的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯專注于企業(yè)營銷型網站、網站重做改版、濱海新區(qū)網站定制設計、自適應品牌網站建設、H5高端網站建設、商城網站制作、集團公司官網建設、成都外貿網站建設公司、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為濱海新區(qū)等各大城市提供網站開發(fā)制作服務。

如何使用 python 處理 nc 數據。

一、nc 數據介紹

nc 全稱 netCDF(The Network Common Data Form),可以用來存儲一系列的數組,就是這么簡單(參考https://www.unidata.ucar.edu/software/netcdf/docs/netcdf_introduction.html)。

既然 nc 可以用來一系列的數組,所以經常被用來存儲科學觀測數據,最好還是長時間序列的。

試想一下一個科學家每隔一分鐘采集一次實驗數據并存儲了下來,如果不用這種格式存儲,時間長了可能就需要創(chuàng)建一系列的 csv 或者 txt 等,而采用 nc 一個文件就可以搞定,是不是很方便。

更方便的是如果這個科學實驗與氣象、水文、溫度等地理信息稍微沾點邊的,完全也可以用 nc 進行存儲, GeoTiff 頂多能多存幾個波段(此處波段可以認為是氣象、水文等不同信號),而 nc 可以存儲不同波段的長時間觀測結果,是不是非常方便。

可以使用 gdal 查看數據信息,執(zhí)行:

gdalinfo name.nc

即可得到如下信息:

Driver: netCDF/Network Common Data Format
Files: test.nc
Size is 512, 512
Coordinate System is `'
Subdatasets:
 SUBDATASET_1_NAME=NETCDF:"test.nc":T2
 SUBDATASET_1_DESC=[696x130x120] T2 (32-bit floating-point)
 SUBDATASET_2_NAME=NETCDF:"test.nc":PSFC
 SUBDATASET_2_DESC=[696x130x120] PSFC (32-bit floating-point)
 SUBDATASET_3_NAME=NETCDF:"test.nc":Q2
 SUBDATASET_3_DESC=[696x130x120] Q2 (32-bit floating-point)
 SUBDATASET_4_NAME=NETCDF:"test.nc":U10
 SUBDATASET_4_DESC=[696x130x120] U10 (32-bit floating-point)
 SUBDATASET_5_NAME=NETCDF:"test.nc":V10
 SUBDATASET_5_DESC=[696x130x120] V10 (32-bit floating-point)
 SUBDATASET_6_NAME=NETCDF:"test.nc":RAINC
 SUBDATASET_6_DESC=[696x130x120] RAINC (32-bit floating-point)
 SUBDATASET_7_NAME=NETCDF:"test.nc":SWDOWN
 SUBDATASET_7_DESC=[696x130x120] SWDOWN (32-bit floating-point)
 SUBDATASET_8_NAME=NETCDF:"test.nc":GLW
 SUBDATASET_8_DESC=[696x130x120] GLW (32-bit floating-point)
 SUBDATASET_9_NAME=NETCDF:"test.nc":LAT
 SUBDATASET_9_DESC=[130x120] LAT (32-bit floating-point)
 SUBDATASET_10_NAME=NETCDF:"test.nc":LONG
 SUBDATASET_10_DESC=[130x120] LONG (32-bit floating-point)
Corner Coordinates:
Upper Left ( 0.0, 0.0)
Lower Left ( 0.0, 512.0)
Upper Right ( 512.0, 0.0)
Lower Right ( 512.0, 512.0)
Center ( 256.0, 256.0)

每一個 SUBDATASET 表示記錄的是一種格式的數據(氣象、水文等等),如果要想查看此 SUBDATASET 的具體信息,可以執(zhí)行:

gdalinfo NETCDF:name.nc:SUBDATASET_NAME

此處的 SUBDATASET_NAME 為上面的 T2、PSFC 等等,可以得到如下信息:

Driver: netCDF/Network Common Data Format
Files: test.nc
Size is 120, 130
Coordinate System is `'
Metadata:
 LAT#description=LATITUDE, SOUTH IS NEGATIVE
 LAT#FieldType=104
 LAT#MemoryOrder=XY
 LAT#stagger=
 LAT#units=degree_north
Corner Coordinates:
Upper Left ( 0.0, 0.0)
Lower Left ( 0.0, 130.0)
Upper Right ( 120.0, 0.0)
Lower Right ( 120.0, 130.0)
Center ( 60.0, 65.0)
Band 1 Block=120x1 Type=Float32, ColorInterp=Undefined
 NoData Value=9.96920996838686905e+36
 Unit Type: degree_north
 Metadata:
 description=LATITUDE, SOUTH IS NEGATIVE
 FieldType=104
 MemoryOrder=XY
 NETCDF_VARNAME=LAT
 stagger=
 units=degree_north

此處只有一個 Band ,每一個 Band 記錄了一個時間點(或者其他區(qū)分形式)的一條記錄,這個記錄是一個數組。

所以看到這里,各位應該已經明白了,可以直接使用 GDAL 處理 nc 數據,比如直接使用 gdalwarp 將某個 SUBDATASET 轉成 GeoTiff 等等,此處暫且不表,各位只需要查閱一下 gdalwarp 手冊即可知道如何處理。

明白了以上信息基本也就清楚了如何處理此數據。

二、數據處理

python 是運用非常廣泛,自然其下各種類庫非常豐富,專業(yè)一點的說法就叫生態(tài)豐富。

2.1 netCDF4

此框架可以直接將 nc 讀取成數組(詳細信息參考https://github.com/Unidata/netcdf4-python (本地下載))。讀取方式如下:

dataset = netCDF4.Dataset('name.nc') # open the dataset

這樣即可讀出整個 nc 中的數據信息,如果需要獲取某個 SUBDATASET 只需要使用 dataset[SUBDATASET_NAME] 即可,返回的是一個三維數組,表示不同時間段(或其他區(qū)分方式下)的數據信息。

我們可以對此數組做各種操作,如求平均值、方差等等,又讓我想起了大學里的那一堆枯燥但又讓人很有興趣的實驗課程。當然,此處如果使用 numpy 框架進行處理,會起到事半功倍的效果,如求長時間序列下的平均值:

np_arr = np.asarray(dataset[SUBDATASET_NAME])
average_arr = np.average(np_arr, axis=0)

到這里跟地信有關的同志都會看出一個問題,此框架只能對數據進行處理,而不能進行與位置有關的操作,這就導致數據無法變成直白的地圖可視化效果。其實任何數據都是相通的,我們可以采用此種方式處理完后轉為 GeoTiff 等,當然我們也可以直接采用 GeoTiff 的處理流程來進行處理。

2.2 rasterio

rasterio 是 Mapbox 開源的空間數據處理框架,功能非常強大,此處不細說,只表如何處理我們的 nc 數據。

當然第一種方式就是使用 netCDF4 處理完之后,使用此框架寫入 GeoTiff,但是這樣不太優(yōu)雅,而且使用了兩個框架,明顯過于麻煩,我們直接使用此框架從讀數據開始處理。

此處讀的時候就有技巧了,要像采用 gdalinfo 讀取 SUBDATASET 一樣來直接讀取此 SUBDATASET 數據,如下:

with rio.open('NETCDF:name.nc:SUBDATASET_NAME') as src:
 print(src.meta)
 dim = int(src.meta['count'])
 src.read(range(1, dim + 1))

即給 open 函數傳入 NETCDF:name.nc:SUBDATASET_NAME,采用 src.read(range(1, dim + 1)) 可以直接讀出此范圍內所有 Band (時間點)的信息,范圍可以自己設定,注意從 0 開始,當然也可以僅讀取某個 Band 的信息。

src.meta 記錄了此 SUBDATASET 的元數據信息,與 gdalinfo 看到的基本相同。

這樣我們就可以繼續(xù)將此數據使用 numpy 等框架進行處理,處理完之后更重要的是要寫入 GeoTiff 中(直白的說就是添加空間信息)。

也很簡單,如下即可:

with rio.open(newfile, 'w', **out_meta) as dst:
 dst.write_band(1, res_arr)

newfile 為存儲路徑,res_arr 為計算結果數組,注意尺寸不要發(fā)生變化(width*height),out_meta 為目標文件的元數據描述信息,可以直接將上面 src.meta 進行簡單處理即可。

out_meta = 
 meta.update({"driver": "GTiff",
   "dtype": "float32",
   'count': 1,
   'crs': 'Proj4: +proj=longlat +datum=WGS84 +no_defs',
   'transform': rasterio.transform.from_bounds(west, south, east, north, width, height)
  })

crs 表示目標數據空間投影信息,transform 表示目標文件 空間范圍信息,可以通過經緯度信息和圖像尺寸等計算得到。

dst.write_band 將數據寫入對應波段,當然此處也可以寫入多個波段,根據計算結果而定,同樣從 1 開始。

感謝各位的閱讀!關于“利用python怎么處理nc數據”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創(chuàng)新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

新聞名稱:利用python怎么處理nc數據-創(chuàng)新互聯
網頁網址:http://www.rwnh.cn/article38/doedpp.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站營銷網站設計、網站內鏈、網站維護、靜態(tài)網站標簽優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都定制網站網頁設計
辽阳县| 若羌县| 砀山县| 开阳县| 泾源县| 中宁县| 特克斯县| 太白县| 乳山市| 栾川县| 阿巴嘎旗| 伽师县| 陆川县| 新宁县| 开封市| 基隆市| 新干县| 安溪县| 马鞍山市| 绥芬河市| 巴塘县| 潜山县| 平定县| 巴东县| 开平市| 黄冈市| 秦皇岛市| 宁波市| 琼海市| 运城市| 金昌市| 烟台市| 广宁县| 陆河县| 娱乐| 米泉市| 黄梅县| 临朐县| 尚义县| 依兰县| 蒙自县|