久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    氣象類Python教程(8) ——netCDF4簡介

     LibraryPKU 2017-10-27 發布于北京

    感冒中,所以這一篇會比較短。(反正也沒什么太多可講的【不】)

    本章我們將介紹用以讀寫netcdf文件的Python第三方庫:netCDF4

    不過在介紹netCDF4之前,我覺得還是應該來說說nc文件的格式問題。

    雖然nc文件我們一直在用,不過其實這個數據的具體格式對很多人來說依然是個未知數,就像一個黑匣子一樣。究其原因,很大程度上是因為nc文件相比一般的二進制文件、文本文件,包含了除了數據本身之外的維度、屬性(是不是有點熟悉?)等信息,想要讀取nc文件,必須得調用專門的函數進行解碼、識別。而這一操作是相當麻煩的。

    如果想要在Fortran中進行nc文件的讀取,不但需要在編譯的時候注明netCDF庫的路徑,同時讀取時需要經歷這樣的步驟:nc文件id獲取>變量id獲取>變量維數id獲取>為變量分配內存空間>讀取,這樣繁瑣的步驟。其中,如果搞錯了變量維數、變量數據類型、變量id,就算是一點差錯都會導致讀取不成功或者讀取到錯誤的結果。

    如果是使用grads進行nc文件的讀取呢?誠然,grads內置了打開nc文件的函數,但是其實它只能識別標準的nc數據格式,有時候會碰到使用grads內部函數無法打開netcdf文件的情況。不過最蛋疼的還是數據處理:有過使用grads經驗的人應該都知道grads在代碼編寫、數據處理上面的麻煩之處;很多人都會選擇將數據輸出到二進制文件,再用Fortran去處理,但是這樣的操作往往會出現錯誤。

    所以,如果有一個平臺既能方便快捷地讀取nc文件,又能支持數據處理,那該多好。

    Python就提供了這樣一個平臺。

    Python中支持nc數據讀寫的庫有很多,其中scipynetCDF4較為出名,因為scipy主要還是一些科學計算的函數庫,所以這里我們著重介紹netCDF4

    netCDF4的下載地址在:https://pypi./pypi/netCDF4,它的github主頁在https://github.com/Unidata/netcdf4-python,感興趣的同學可以前去了解關于這個庫的更多信息。需要注意的是canopy本身沒有包含netCDF4,需要用戶自行下載安裝,具體方法可以參加之前的教程。

    輸入:



    如果沒有錯誤,那就說明安裝成功了。不過呢,因為netCDF4包含了很多的函數,通常我們要用到的只有Dataset一個,所以調用的時候請在腳本開頭輸入:


    注意大小寫。

    Dataset函數的作用是用只讀或者讀寫的方式打開nc數據文件。直接來看例子吧~


    這里的hgt1973.nc1973年的日均高度場數據,而我所做的,就是用只讀的方式創建了nc文件對象a。到這一步我們就已經完成了nc文件的打開操作,下一步我們可以來查看一下變量:


    nc文件對象a有一個屬性叫做variable,顧名思義指代的是文件中的變量信息,而變量信息又有一個屬性叫做keys,指代了這些變量的名字。通過調用a.varibles.keys()就可以查看該文件中的變量名了。可以發現hgt1973.nc中包含了5個變量,分別為層次、維度、經度和高度場。如果是在Fortran中,知道了變量名我們還需要去查看變量的維數,才能最終確定需要分配的數組空間。不過Python作為一門動態語言是不需要考慮變量維數這一說的:賦值的同時即內存空間的分配。

    說到a.variables.keys(),大家是不是覺得很像python的字典呢?所以想要獲得對應的變量數值就變得很簡單了:


    如圖,通過直接賦值的方式我們便獲得了hgt1973中的變量“level”。實際上除了獲得數值,我們還可以查看“level”的其他屬性例如:

    可以直接將level的基本信息打印到屏幕:


    可以查看數據類型:


    查看數據名(有時會和變量名不一樣):


    查看維數:


    等等,大家可以按下tab自行查看。

    同理,我們也能夠直接讀取其他變量:


    只要讀取出來,之后便能夠通過python中的其他數據處理過程進行處理了。

    不過這個nc文件還相對箱單了一些,我們再來看個復雜一點的:


    Wrfinput_d02是一個wrf模式的初始場文件。用過wrf模式的讀者應該會知道,我們使用wrf進行數值模擬之前需要在namelist.input中進行大量的參數設置。而這些參數中的大部分都被寫入到了wrfinput之中。如:


    邊界層參數化方案、陸面過程參數化方案以及網格中心經緯度。這些都不是作為變量存放在nc文件中的,而是以“屬性”的形式。所以如果你遇到variables中找不到的變量,可以直接在nc文件對象的屬性中查找。

    讀取變量和查看變量信息的方式和之前一樣:

    查看信息:


    讀取變量:


    因為wrfinputnc數據類型更為復雜,所以它的變量包含了更多的屬性信息,例如C網格的間隔方向等等(如果不做模式的同學可以不用了解這個概念):


    不管怎么樣,有了netCDF4這個庫,我們便可以方便快捷地讀取nc數據了~

    那么修改nc數據呢?也很簡單,只需要在打開文件時加上‘a’或者‘w’即可:


    如圖,這里我已經對hgt.1973.nc中的level變量進行了修改。修改完畢后請不要忘記調用close進行關閉,這樣才能完成對數據的修改。


    最后再來說說HDF數據。hdfnetCDF一樣,是一種自說明(即自帶了數據信息說明)常用的數據格式,很多時候用在衛星資料的儲存中。想要在Python中讀取hdf格式數據則需要下載對應的庫:hdf4hdf5或者h5py。這里尤其請注意hdf的版本信息,hdf4hdf5雖然一個是四一個是五,但實際的內部結構卻有很大不同,需要調用不同的庫進行解碼。不過只要用對了庫,其它的步驟和讀取nc文件都差不多,例如讀取風云衛星的標稱數據:


    我這里只是讀取了該文件中的‘NomFileInfo’變量,這個變量中包含了衛星數據的一些基本信息。今后有機會的話我會來說說如何使用python讀取風云衛星的標稱hdf數據,并繪制衛星云圖:


    不過心急吃不了熱豆腐,心急感冒也好不了。。。

    所以我們下期再見咯!(吃藥躺床板去。。。



      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 免费无码VA一区二区三区| 久久夜色撩人精品国产小说| 国产精品福利自产拍久久| 又大又爽又硬的曰皮视频| 鲁丝一区二区三区免费| 精品无码久久久久久久动漫| 一区二区三区精品视频免费播放| 亚洲AV无码乱码在线观看牲色 | 免费A级毛片中文字幕| 国产免费1卡2卡| 下面一进一出好爽视频| 一卡2卡三卡4卡免费网站| 亚洲色大成成人网站久久| 国产AV人人夜夜澡人人爽| 国产精品自拍中文字幕| 欧美午夜成人片在线观看| 国产人妻久久精品一区| 一区二区三区不卡国产| 9色国产深夜内射| 伊人久久综合无码成人网| 国产影片AV级毛片特别刺激| 亚洲中文字幕无码一久久区| 人成午夜免费大片| 国产360激情盗摄全集| 国产第一页浮力影院入口| 又大又黄又粗高潮免费| 亚洲国产精品综合久久20| 国精品午夜福利视频| 亚洲一区二区三区在线观看精品中文| 日韩女同在线二区三区| 四虎影视一区二区精品| 日本A级视频在线播放| 国产精品成人影院在线观看| 国产精品久久久久无码AV| 99在线精品国自产拍中文字幕| 日韩精品一区二区三区视频| 18禁网站免费无遮挡无码中文| 华人在线亚洲欧美精品| 精品国产免费一区二区三区香蕉| 日本大胆欧美人术艺术| 国产成熟妇女性视频电影|