2

Numpy では、いくつかのバイナリ データを 1 つの変数にアンパックする必要があります。過去に、Numpy の「fromstring」関数を使用して解凍し、最初の要素を抽出していました。バイナリ データを Numpy 型に直接アンパックし、ほとんど無視する Numpy 配列を作成するオーバーヘッドを回避する方法はありますか?

これは現在私がしていることです:

>>> int_type
dtype('uint32')
>>> bin_data = '\x1a\x2b\x3c\x4d'
>>> value = numpy.fromstring(bin_data, dtype = int_type)[0]
>>> print type(value), value
<type 'numpy.uint32'> 1295788826

私はこのようなことをしたいと思います:

>>> value = int_type.fromstring(bin_data)
>>> print type(value), value
<type 'numpy.uint32'> 1295788826
4

2 に答える 2

2
In [16]: import struct

In [17]: bin_data = '\x1a\x2b\x3c\x4d'

In [18]: value, = struct.unpack('<I', bin_data)

In [19]: value
Out[19]: 1295788826
于 2012-11-19T10:13:47.670 に答える
2
>>> np.frombuffer(bin_data, dtype=np.uint32)
array([1295788826], dtype=uint32)

これにより配列構造が作成されますが、実際のデータは文字列と配列の間で共有されます。

>>> x = np.frombuffer(bin_data, dtype=np.uint32)
>>> x[0] = 1
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
RuntimeError: array is not writeable

一方、それfromstringをコピーします。

于 2012-11-19T10:23:15.557 に答える