LoginSignup
0
0

HDF5のfloat16データをJavaScriptで読み込む

Last updated at Posted at 2023-07-07

問題

float16のHDF5データをJavaScriptで読みたいが、各種ライブラリが対応していない。
ネットにも解決法がない。

解決法

(雑ですが、ビルド済みのJSに追記します。ソースからの書き換えは適宜読み替えてください。)

以下のHDF5ライブラリに追記します。
https://github.com/usnistgov/h5wasm

https://cdn.jsdelivr.net/npm/h5wasm@0.6.0/dist/esm/hdf5_hl.js
import ModuleFactory from './hdf5_util.js';
+ import { Float16Array } from "https://cdn.jsdelivr.net/npm/@petamoriken/float16/+esm";
export var Module; //: H5WasmModule = null;
export var FS = null;

// ――――――――――――――――― 省略 ―――――――――――――――――
// :60行目
    else { // type ==== 1 (float)
        if (size === 8) {
            return Float64Array;
        }
        else if (size === 4) {
            return Float32Array;
        }
+       else if (size === 2){
+           return Float16Array;
+       }
        else {
            throw new Error(`Float${size * 8} not supported`);
        }
    }

// ――――――――――――――――― 省略 ―――――――――――――――――
// :315行目
const TypedArray_to_dtype = new Map([
    ['Uint8Array', '<B'],
    ['Uint16Array', '<H'],
    ['Uint32Array', '<I'],
    ['BigUint64Array', '<Q'],
    ['Int8Array', '<b'],
    ['Int16Array', '<h'],
    ['Int32Array', '<i'],
    ['BigInt64Array', '<q'],
+   ['Float16Array', '<f2'],
    ['Float32Array', '<f'],
    ['Float64Array', '<d'],
]);

// ――――――――――――――――― 省略 ―――――――――――――――――

解説

そもそも素のJavaScriptはfloat16を扱えないようです。
よって、追加で以下のライブラリを読み込んでいます。
https://github.com/petamoriken/float16/

備考

直接は関係ないですが、ローカルのHDF5ファイルを読み込むには以下のissueも参考になります。
https://github.com/usnistgov/h5wasm/issues/43

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0