ハードディスク上の大きな Fortran レコード (12G) を numpy 配列にマップしたいと考えています。(メモリを節約するためにロードする代わりにマッピングします。)
Fortran レコードに格納されたデータは、レコード マーカーで分割されているため、連続していません。レコード構造は「マーカー、データ、マーカー、データ、…、データ、マーカー」です。データ領域とマーカーの長さは既知です。
マーカー間のデータの長さは 4 バイトの倍数ではありません。それ以外の場合は、各データ領域を配列にマップできます。
最初のマーカーは memmap でオフセットを設定することでスキップできますが、他のマーカーをスキップしてデータを配列にマップすることは可能ですか?
あいまいな表現の可能性があることをお詫びし、解決策または提案に感謝します。
5月15日編集
これらは、フォーマットされていない Fortran ファイルです。レコードに格納されるデータは、(1024^3)*3 float32 配列 (12Gb) です。
2 ギガバイトを超える可変長レコードのレコード レイアウトを以下に示します。
(詳しくはこちら→【レコードの種類】→【可変長レコード】の項をご覧ください。)
私の場合、最後のサブレコードを除いて、各サブレコードの長さは 2147483639 バイトで、8 バイトで区切られています (上の図でわかるように、前のサブレコードの終了マーカーと次のサブレコードの開始マーカー、8 バイトで合計 ) 。
2147483639 mod 4 =3 のように、最初のサブレコードが特定の浮動小数点数の最初の 3 バイトで終わり、2 番目のサブレコードが残りの 1 バイトで始まることがわかります。