3

int32 データ値の配列を持つ HDF5 データファイルがあります。その配列に格納されているデータを、異なる形式 (double) の異なる値に変更したいと考えています。

たとえば、次のようにデータ型をクエリできます。

 finf=h5info('file.hdf5');
 finf.Datasets(1).Datatype

 ans = 

      Name: ''
      Class: 'H5T_INTEGER'
      Type: 'H5T_STD_I32LE'
      Size: 4
      Attributes: []

同じノードの場所にデータを再作成しようとすると、データ セットが既に存在するという次のエラーが表示されます。

t=double(h5read([filepath filename],'/t'));

% more t calculations here....

h5create('file.hdf5','/t',size(t),'DataType','double');

Error using h5create>create_dataset (line 159)
The dataset '/t' already exists.

Error in h5create (line 69)
create_dataset(options);

hdf5ファイルのデータセットを削除する関数についてMatlabのドキュメントを調べましたが、参照が見つかりません。アイデアはありますか?

4

2 に答える 2

2

データセットを削除したり、そのデータ型を変更したりすることはできません。HDF5 マニュアルのセクション 5.3.2 から:

The datatype is set when the dataset is created and can never be changed.

これは、HDF5 ファイルでのスペースの割り当て方法によるものです。(同じ理由で) データセットを削除することはできませんが、「リンクを解除」してアクセスできなくすることはできますが、これによって使用済みスペースが再利用されるわけではありません。

本当にデータ型を変更する必要がある場合は、2 つの選択肢があります。1 つ目は、古いデータセットのリンクを解除し、その場所に新しいデータセットを作成することです。新しいデータセットには、古いデータセットと同じ名前を付けることができます。ただし、スペースが問題になる場合は、完全に新しい HDF5 ファイルを作成し、古いデータを新しいファイルにコピーすることをお勧めします。

于 2013-08-02T08:51:30.313 に答える
0

同様の問題であるこの投稿によると、HDF5 ファイルのデータセットを削除するメカニズムはありません。また、その場で変更できることも示しています。

于 2013-08-01T13:52:08.870 に答える