Numpy将二进制字符串解压缩为单个变量

时间:2012-11-19 10:08:43

标签: python numpy binary packing

在Numpy中,我需要将一些二进制数据解压缩到一个变量中。在过去,我一直在使用' fromstring' Numpy中的函数并提取第一个元素。有没有办法可以直接将二进制数据解压缩为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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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会复制它。