日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]

發布時間:2024/10/12 python 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用python netCDF4庫讀取.nc文件 和 創建.nc文件

1. 介紹

.nc(network Common Data Format)文件是氣象上常用的數據格式,python上讀取.nc使用較多的庫為netCDF4這個庫,下面將介紹這個庫的具體方法。

.nc文件的讀取

#導入nc庫

import netCDF4 as nc

filename = '2017-06-15_2017-06-17.nc' # .nc文件名

f = nc.Dataset(filename) #讀取.nc文件,傳入f中。此時f包含了該.nc文件的全部信息

step1: 查看.nc文件的全部變量,及該變量的全部信息(維度大小,單位等)

all_vars = f.variables.keys() #獲取所有變量名稱

print(len(all_vars)) #長度為18

all_vars_info = f.variables.items() #獲取所有變量信息

print(type(all_vars_info)) #輸出為: odict_items 。這里將其轉化為 list列表

print(len(all_vars_info)) #長度為18

all_vars_info = list(all_vars_info) #此時每個變量的信息為其中一個列表

如圖:包含經緯度、時間、等變量名稱

看看 all_vars_info的前兩個變量的信息,如下,顯示了 shape unit name float32 fillvalue等信息

step2: 查看.nc文件的單個變量,及該變量的全部信息(維度大小,單位等)

如果對某個變量感興趣(已知變量名),想查看這個變量的信息,獲取這個變量的數據,方法如下:

我們要查看 ’u‘的信息

var = 'u'

var_info = f.variables[var] #獲取變量信息

var_data = f[var][:] #獲取變量的數據

print(var_info)

print(var_data.shape)

#很方便轉化為array數組

print(type(var_data)) # .nc文件的變量數組都為Masked array

var_data = np.array(var_data) #轉化為np.array數組

輸出如下:

注意:完成上述操作之后,記得關掉該文件

f.close() #關閉文件。如果文件關閉后,再使用f.variabels.items()等操作是行不通的。

3. nc文件的創建

step1: 創建一個文件

f_w = nc.Dataset('hecheng.nc','w',format = 'NETCDF4') #創建一個格式為.nc的,名字為 ‘hecheng.nc’的文件

step2: 寫入一些基本的信息

.nc文件的里面的每個變量都有維度信息,比如,上面的 var=‘u’,維度為 1237161*177。這里面的各個維度,并不是隨便定義的,是與基礎的變量信息相關的。

如[12,37,161,177] = [time,level,latitude,longitude],第一個維度為時間信息,依次為 垂直層信息,緯度、經度信息。

所以,我們要先寫入一些基本的信息:時間,垂直層,緯度,經度

#time緯度為12。注意,第2個參數 表示維度,但是必須是 integer整型,也就是只能創建一個基礎單一維度信息。

#如果后面要創建一個變量維度>1,則必須由前面的單一維度組合而來。后面會介紹。

#確定基礎變量的維度信息。相對與坐標系的各個軸(x,y,z)

f_w.createDimension('time',12)

f_w.createDimension('level',37)

f_w.createDimension('lat',161)

f_w.createDimension('lon',177)

##創建變量。參數依次為:‘變量名稱’,‘數據類型’,‘基礎維度信息’

f_w.createVariable('time',np.int,('time'))

f_w.createVariable('level',np.int,('level'))

f_w.createVariable('lat',np.float32,('lat'))

f_w.createVariable('lon',np.float32,('lon'))

#寫入變量time的數據。維度必須與定義的一致。

time = np.array([0,6,12,18,0,6,12,18,0,6,12,18])

f_w.variables['time'][:] = time

#新創建一個多維度變量,并寫入數據,

f_w.createVariable( 'u', np.float32, ('time','level','lat','lon'))

var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)

f_w.variables[var][:] = var_data

關閉文件

f_w.close()

還可以寫入fill_value等信息

按照上述方式創建完成后,用一些可視化軟件打開,結果如上圖。

step3: 創建群組

如上圖,所以變量都是平行的位置,如果變量特別多,將相同類型的變量放進同一個group中,會更加方便。

來看一個示例:

f_w = nc.Dataset('haha4.nc','w',format = 'NETCDF4')

f_w.createDimension('time',12)

f_w.createDimension('level',37)

f_w.createDimension('lat',161)

f_w.createDimension('lon',177)

f_w.createVariable('time',np.int,('time'))

f_w.createVariable('level',np.int,('level'))

f_w.createVariable('lat',np.float32,('lat'))

f_w.createVariable('lon',np.float32,('lon'))

time = np.array([0,6,12,18,0,6,12,18,0,6,12,18])

f_w.variables['time'][:] = time

f_w.variables['level'][:] = level

f_w.createVariable( 'q', np.float32, ('time','level','lat','lon'))

var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)

f_w.variables['q'][:] = var_data

#創建一個群組,名字為'wind'

group1 = f_w.createGroup('wind')

group1.createVariable( 'u', np.float32, ('time','level','lat','lon'))

var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)

group1.variables['u'][:] = var_data

group1.createVariable( 'v', np.float32, ('time','level','lat','lon'))

var_data = np.zeros(shape=(12,37,161,177), dtype = np.float32)

group1.variables['v'][:] = var_data

group1.close # 關閉群組, 注意,這里沒有括號

f_w.close()

創建結果如下:

看,group的信息出來了

**#step4:查看帶有group的.nc文件的信息 **

f1 = nc.Dataset('haha5.nc')

vars = f1.variables.keys() #odict_keys(['time', 'level', 'lat', 'lon', 'q']) 看不到groups信息

#通過以下命令

group_name = f1.groups.keys() #獲取組名,輸出為:odict_keys(['wind'])

使用如下命令都能看到group內的變量的信息。

#獲取group內的變量的數據

group_var_data = f1['wind']['u'][:]

print(group_var_data.shape) #(12, 37, 161, 177)

總結

氣象上常用除了.nc文件外,還有 hdf文件,這兩者格式都差不多,但是我更愛.hdf格式文件

后面有機會再介紹.hdf文件的讀寫操作。

————————————————

版權聲明:本文為CSDN博主「fangzuliang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_43718675/article/details/102158535

總結

以上是生活随笔為你收集整理的python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。