読者です 読者をやめる 読者になる 読者になる

C++によるHDF5への出力

HDF5 ライブラリ

HDF5のC++での使い方は下記にまとめられている。
HDF5 C++ API: Main Page
かなりわかりにくいけど、一応下記を見れば全てわかるのだろう、わかる人には。今の私には時間がかかりすぎるのでパス。


とにかく他のサンプルコードも見て、わかったこと。
HDF5への出力において一番面倒なことは、出力フォーマットとして一次元のベクトルデータにしか対応していない点である。
数値計算はその多くが行列(テンソル)演算であり、可視性を守るためには速度を犠牲にしつつも多次元配列の形でテンソルを定義したいところである。


この対処法を調べたところ、下記サイトでサンプルコードを公開しているこれまでとは違う神を発見。
今度はOxfordの研究者らしい。
HDF5 C++ interface: writing dynamic 2D arrays - Stack Overflow

C++の拡張ライブラリであるboostに実装されているmultiarrayを使用することで、一次元配列をあたかも多次元配列であるかのように処理しつつ、hdf5への出力では、しれっと一次元配列として入力している、と、見ればいいはず。

実際に試してみる。do_write_hdf5関数の中のvectorにstd::を付け忘れているけど、修正したら問題なく動く。multiarray型の任意の型の多次元配列に対応している。超便利。


vector型は使いやすくて好きだったけど、この分だと早々にboostのmultiarrayへ乗り換えた方がよさげ。
push_backなど、vector型でないとできないような操作はvectorで行うとして、普通の固定長動的配列とみなせる配列は全てmultiarrayで定義したほうがいいかもしれない。

しかしboostの使用はやはりC++userには避けられないのか…。