scipy.io.

netcdf_file#

class scipy.io.netcdf_file(filename, mode='r', mmap=None, version=1, maskandscale=False)[原始碼]#

NetCDF 資料的檔案物件。

netcdf_file 物件有兩個標準屬性:dimensionsvariables。兩者的值都是字典,分別將維度名稱對應到其關聯的長度,以及變數名稱對應到變數。應用程式不應修改這些字典。

所有其他屬性都對應到 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 資料結構主要有三個部分

  1. 維度

  2. 變數

  3. 屬性

維度部分記錄變數使用的每個維度的名稱和長度。然後,變數將指示它使用的維度以及任何屬性(例如資料單位),以及包含變數的資料值。良好的實務做法是包含一個與維度名稱相同的變數,以提供該軸的值。最後,屬性部分將包含其他資訊,例如檔案建立者的名稱或用於收集資料的儀器。

在將資料寫入 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 物件處於寫入模式,則執行同步到磁碟的刷新。