HDF5 には、データ セット、各列に名前が付けられた表形式のデータを含むいくつかのファイルが与えられており、異なるデータ型 (たとえば、文字列型の「作成者」、符号なし整数型の「カウント」など) である可能性があります。 HDF5 を読み取るために私が見つけた唯一の純粋な Java (つまり非 JNI) ライブラリは NetCDF です。
NetCDF を使用して、HDF5 データ セットから 1 列のデータを読み取ることができるようVariable
です。しかし、データ セットからデータのテーブル全体を読み取る方法はありませんか? NetCDF への HDF5 データ セットは、テーブルではなく、一次元の配列値を持つ変数のコレクションにすぎませんか?
編集:さらに説明しましょう。HDFView 2.9 で HDF5 ファイルの 1 つを開き、「HDF5 化合物データセット」の項目に移動して「開く」を選択すると、「変数」が列ヘッダーとして表示され、各行がインデックスでマークされています。例として、integer-32-signed 型の「Foo」列と、string 型の「Bar」列があるとします。
しかし、この「複合データセット」からデータをロードするための NetCDF API は、表形式のデータとはまったく似ていないようです。「Foo」という名前の「変数」の配列全体をロードするように要求できますが、その「変数」は「Bar」変数とは無関係のようです。これは、「Foo」変数と「Bar」変数が異なる長さの配列になる可能性があることを意味しますか?
テーブルでは、行ごとにアクセスできると期待しています。「5行目にすべての値を含む配列をください」と言うことができますか? プリミティブ値やボックス化などに問題がありますが、行全体の基になるバイトを返すようにリクエストできますか? 「列 'Foo' の 5 行目の値を整数として教えてください」と言えますか? 私が本当に要求したいのは、「Foo」配列の要素 5 だとおっしゃるかもしれません。そこで、元の質問に戻ります:質問 1.データ セットの NetCDF API は、完全に無関係な変数のグループ (潜在的に別の配列の長さなど) にアクセスするだけですか? それとも、これにアクセスできる API がありますか?真のテーブルとしてのデータ?
それでも表形式のビューと変数のリストの違いがわからない場合は、次の関連する質問を検討してください。質問 2.データ セット テーブルの行数を調べるにはどうすればよいですか? データセット内のすべての変数を反復処理して、各配列の最大長を見つける必要がありますか?
変数の配列の長さを見つけているので、さらに別の問題が発生します:質問 3.配列全体を読み取らずにデータセット内の変数の長さを見つけるにはどうすればよいですか? を使用するnetCDFFile.findVariable("/some/path/dataset.variable").getSize()
と、単純に値が返されます1
。実際に配列全体 (数メガバイトになる可能性があります!) を読み取ってからnetCDFVariable.read().getSize()
、正しい長さを取得します。より効率的な方法はありませんか?
回答:回答は、 John Caron の回答の詳細であることが判明しました。何らかの理由で、親構造 (データセット/テーブル) が固定長であるにもかかわらず、各変数 (列) が可変長であると見なします。より表形式の方法で変数のグループを操作するには、親Structure
(自体 a Variable
) への参照を取得し、そのサイズを尋ねます。Structure.getSize()
値は、各変数の長さを正しく示します。ただし、それぞれがVariable.getSize()
を返し1
ます。