netcdf_file#
- class scipy.io.netcdf_file(filename, mode='r', mmap=None, version=1, maskandscale=False)[原始碼]#
NetCDF 資料的檔案物件。
netcdf_file
物件有兩個標準屬性:dimensions 和 variables。兩者的值都是字典,分別將維度名稱對應到其關聯的長度,以及變數名稱對應到變數。應用程式不應修改這些字典。所有其他屬性都對應到 NetCDF 檔案中定義的全域屬性。全域檔案屬性是透過賦值給
netcdf_file
物件的屬性來建立的。- 參數:
- filename字串或檔案類物件
字串 -> 檔案名稱
- mode{‘r’, ‘w’, ‘a’}, 選用
讀取-寫入-附加模式,預設為 ‘r’
- mmapNone 或 bool, 選用
是否在讀取時使用記憶體映射 filename。當 filename 是檔案名稱時,預設為 True;當 filename 是檔案類物件時,預設為 False。請注意,當使用記憶體映射時,傳回的資料陣列會直接參照磁碟上的記憶體映射資料,而且只要存在對它的參照,就無法關閉檔案。
- version{1, 2}, 選用
要讀取/寫入的 netcdf 版本,其中 1 代表經典格式,而 2 代表64 位元偏移格式。預設為 1。請參閱這裡以取得更多資訊。
- maskandscalebool, 選用
是否根據屬性自動縮放和/或遮罩資料。預設為 False。
註解
此模組相較於其他模組的主要優勢在於,它不需要程式碼連結到 NetCDF 程式庫。此模組衍生自 pupynere。
NetCDF 檔案是一種自我描述的二進位資料格式。該檔案包含描述檔案中維度和變數的中繼資料。有關 NetCDF 檔案的更多詳細資訊,請參閱這裡。NetCDF 資料結構主要有三個部分
維度
變數
屬性
維度部分記錄變數使用的每個維度的名稱和長度。然後,變數將指示它使用的維度以及任何屬性(例如資料單位),以及包含變數的資料值。良好的實務做法是包含一個與維度名稱相同的變數,以提供該軸的值。最後,屬性部分將包含其他資訊,例如檔案建立者的名稱或用於收集資料的儀器。
在將資料寫入 NetCDF 檔案時,通常需要指示「記錄維度」。記錄維度是變數的無界維度。例如,溫度變數可能具有緯度、經度和時間的維度。如果想要隨著時間的推移將更多溫度資料新增到 NetCDF 檔案,則應將時間維度標記為記錄維度。
此外,NetCDF 檔案標頭包含資料在檔案中的位置,因此可以有效率地完成存取,而無需將不必要的資料載入記憶體。它使用
mmap
模組來建立對應到磁碟上資料的 Numpy 陣列,以達到相同的目的。請注意,當使用
netcdf_file
開啟 mmap=True 的檔案(唯讀預設值)時,它傳回的陣列會直接參照磁碟上的資料。如果這些陣列仍然存在,則不應關閉檔案,並且在要求關閉時也無法乾淨地關閉。如果從記憶體映射的 Netcdf 檔案取得的資料陣列要在檔案關閉後進行處理,您可能需要複製它們,請參閱下面的範例。範例
若要建立 NetCDF 檔案
>>> from scipy.io import netcdf_file >>> import numpy as np >>> f = netcdf_file('simple.nc', 'w') >>> f.history = 'Created for a test' >>> f.createDimension('time', 10) >>> time = f.createVariable('time', 'i', ('time',)) >>> time[:] = np.arange(10) >>> time.units = 'days since 2008-01-01' >>> f.close()
請注意將
arange(10)
賦值給time[:]
。公開時間變數的切片允許在物件中設定資料,而不是讓arange(10)
覆寫time
變數。若要讀取我們剛建立的 NetCDF 檔案
>>> from scipy.io import netcdf_file >>> f = netcdf_file('simple.nc', 'r') >>> print(f.history) b'Created for a test' >>> time = f.variables['time'] >>> print(time.units) b'days since 2008-01-01' >>> print(time.shape) (10,) >>> print(time[-1]) 9
NetCDF 檔案在以唯讀方式開啟時,會傳回直接參照磁碟上記憶體映射資料的陣列
>>> data = time[:]
如果資料要在檔案關閉後進行處理,則需要將其複製到主記憶體
>>> data = time[:].copy() >>> del time >>> f.close() >>> data.mean() 4.5
NetCDF 檔案也可以用作上下文管理器
>>> from scipy.io import netcdf_file >>> with netcdf_file('simple.nc', 'r') as f: ... print(f.history) b'Created for a test'
方法
close
()關閉 NetCDF 檔案。
createDimension
(name, length)將維度新增到 NetCDF 資料結構的維度部分。
createVariable
(name, type, dimensions)為
netcdf_file
物件建立一個空變數,指定其資料類型和它使用的維度。flush
()如果
netcdf_file
物件處於寫入模式,則執行同步到磁碟的刷新。sync
()如果
netcdf_file
物件處於寫入模式,則執行同步到磁碟的刷新。