5

昨年書いたバイナリファイルパーサーをnumpyで解析/データ蓄積することで高速化しようとしています。カスタマイズされたデータ構造を定義し、バイナリファイルからそれらにデータを丸呑みするnumpyの機能は、これらのファイルの一部のフィールドが「非標準」長の符号なし整数(6バイトなど)であることを除いて、私が必要とするもののように見えます。Python 2.7を使用しているので、これらのフィールドを処理するために独自のエミュレートされたバージョンのint.from_bytesを作成しましたが、これらのフィールドをnumpyでネイティブに整数に読み取る方法がある場合は、明らかにはるかに高速で望ましいでしょう。

4

1 に答える 1

5

Numpyは任意のバイト長の整数をサポートしておらず、ctypesビットフィールドを使用することは価値があるよりも厄介です。

ベクトル化されたスライスを使用して、データを次に高い標準サイズの整数に変換することをお勧めします。

buf = "000000111111222222"
a = np.ndarray(len(buf), np.dtype('>i1'), buf)
e = np.zeros(len(buf) / 6, np.dtype('>i8'))
for i in range(3):
    e.view(dtype='>i2')[i + 1::4] = a.view(dtype='>i2')[i::3]
[hex(x) for x in e]
于 2012-07-16T19:45:34.213 に答える