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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

h5py快速入门指南

發布時間:2025/6/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 h5py快速入门指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
h5py是Python語言用來操作HDF5的模塊。下面的文章主要介紹h5py的快速入門指南,翻譯自h5py的官方文檔:http://docs.h5py.org/en/lates... 。該翻譯僅為個人學習h5py為目的,如有翻譯不當之處,請速聯系筆者或提供正確的翻譯,非常感謝!

安裝

使用Anaconda或者Miniconda:

conda install h5py

用Enthought Canopy,可以使用GUI安裝包安裝或用

enpkg h5py

安裝。用pip或setup.py安裝,請參考安裝方式。

核心概念

一個HDF5文件就是一個容器,用于儲存兩類對象:datasets,類似于數組的數據集合;groups,類似于文件夾的容器,可以儲存datasets和其它groups。當使用h5py時,最基本的準則為:

groups類似于字典(dictionaries),dataset類似于Numpy中的數組(arrays)。

假設有人給你發送了一個HDF5文件, mytestfile.hdf5(如何創建這個文件,請參考:附錄:創建一個文件).首先你需要做的就是打開這個文件用于讀取數據:

>>> import h5py >>> f = h5py.File('mytestfile.hdf5', 'r')

這個File對象是你的起點。那么這個文件中儲存了什么呢?記住,h5py.File就像一個Python字典,因此我們可以查看這些鍵值,

>>> list(f.keys()) ['mydataset']

根據我們的觀察,這個文件中有一個dataset,即mydataset. 讓我們把這個dataset作為Dataset對象來檢驗

>>> dset = f['mydataset']

我們得到的這個對象不是一個數組,而是一個HDF5 dataset. 就像Numpy中的數據那樣,datasets有形狀(shape)和數據類型(data type)

>>> dset.shape (100,) >>> dset.dtype dtype('int32')

同時它們也支持數組風格的切片操作。下面是你如何完成這個文件中的一個dataset的讀寫的方法

>>> dset[...] = np.arange(100) >>> dset[0] 0 >>> dset[10] 10 >>> dset[0:100:10] array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

想要更多參考,請前往File Objects和Datasets.

附錄:創建一個文件

此時此刻,你也許會好奇mytestdata.hdf5是如何創建的。當File對象初始化后,我們通過將模式(mode)設置為w來創建一個文件。其它模式(mode)為a(用于讀、寫、新建)和r+(用于讀、寫)。一個完整的File模式以及它們的含義的列表可參考File對象。

>>> import h5py >>> import numpy as np >>> f = h5py.File("mytestfile.hdf5", "w")

File對象有幾個看上去挺有趣的方法。其一為create_dataset,顧名思義,就是通過給定形狀和數據類型來創建一個dataset

>>> dset = f.create_dataset("mydataset", (100,), dtype='i')

File對象是上下文管理器,因此,下面的代碼也可運行

>>> import h5py >>> import numpy as np >>> with h5py.File("mytestfile.hdf5", "w") as f: >>> dset = f.create_dataset("mydataset", (100,), dtype='i')

Groups和分層結構

“HDF”是“Hierarchical Data Format”的縮寫。每個HDF5文件中的對象都有一個名字(name),它們以類似于POSIX風格的分層結構存放,用/分隔符分隔

>>> dset.name u'/mydataset'

在這個系統中“文件夾”(folders)被命名為groups. 我們創建的File對象本身也是一個group, 在這種情形下是根group(root group),名字為/:

>>> f.name u'/'

創建一個子group(subgroup)可以通過一個巧妙的命令create_group來完成。但是,我們首先需要以讀/寫模式來打開文件

>>> f = h5py.File('mydataset.hdf5', 'r+') >>> grp = f.create_group("subgroup")

所有Group對象,如同File對象一樣,也有create_*方法:

>>> dset2 = grp.create_dataset("another_dataset", (50,), dtype='f') >>> dset2.name u'/subgroup/another_dataset'

順便說一句,你不需要手動地創建所有的中間groups. 指定一個完整的路徑同樣可行

>>> dset3 = f.create_dataset('subgroup2/dataset_three', (10,), dtype='i') >>> dset3.name u'/subgroup2/dataset_three'

Groups支持大部分的Python字典風格的接口。你可以使用條目獲取(item-retrieval)的語法來獲取這個文件中的對象:

>>> dataset_three = f['subgroup2/dataset_three']

迭代一個group,就會產生它的成員的名字:

>>> for name in f: ... print name mydataset subgroup subgroup2

成員關系檢測也可以通過使用名字來實現:

>>> "mydataset" in f True >>> "somethingelse" in f False

你甚至可以使用完整的路徑的名字:

>>> "subgroup/another_dataset" in f True

它也有你熟悉的keys(), values(), items() 和iter() 的方法,以及get()方法。

因為迭代一個group只會產生它的直屬成員,所以想要迭代一個完整的文件,可以使用Group的方法visit()和visititems(), 它們通過一個調用(callable)來實現:

>>> def printname(name): ... print name >>> f.visit(printname) mydataset subgroup subgroup/another_dataset subgroup2 subgroup2/dataset_three

想要更多參考,請前往Groups.

屬性

HDF5的最好特征之一就是你可以在描述的數據后儲存元數據(metadata)。所有的groups和datasets都支持幾個數據位的附屬命名,稱為屬性。(All groups and datasets support attached named bits of data called attributes.)

屬性可以通過attrs這個代理對象來獲取,這會再一次執行字典接口:

>>> dset.attrs['temperature'] = 99.5 >>> dset.attrs['temperature'] 99.5 >>> 'temperature' in dset.attrs True

想要更多參考,請前往Attributes.

總結

以上是生活随笔為你收集整理的h5py快速入门指南的全部內容,希望文章能夠幫你解決所遇到的問題。

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