問題
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