微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将二进制字符串转换为numpy数组

如何解决将二进制字符串转换为numpy数组

>>> np.frombuffer(b'\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@', dtype='<f4') # or dtype=np.dtype('<f4'), or np.float32 on a little-endian system (which most computers are these days)
array([ 1.,  2.,  3.,  4.], dtype=float32)

或者,如果您想要大端字节序:

>>> np.frombuffer(b'\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@', dtype='>f4') # or dtype=np.dtype('>f4'), or np.float32  on a big-endian system
array([  4.60060299e-41,   8.96831017e-44,   2.30485571e-41,
         4.60074312e-41], dtype=float32)

b到Python 3不是现有必要的,当然。

实际上,如果您实际上是使用二进制文件从中加载数据,则甚至可以跳过using-a- string步骤,并使用直接从文件中加载数据numpy.fromfile()

另外,以防万一,请输入dtype参考:http ://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

解决方法

假设我有字符串:

my_data = '\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'

我得到的位置无关紧要,但是为了具体起见,假设我从二进制文件中读取了它。

我知道我的字符串是4(4字节)浮点数的二进制表示形式。我想将那些浮点数作为一个numpy数组。我 可以 做:

import struct
import numpy as np
tple = struct.unpack( '4f',my_data )
my_array = np.array( tple,dtype=np.float32 )

但是创建中间元组似乎很愚蠢。有没有一种方法可以在不创建中间元组的情况下执行此操作?

编辑

我还希望能够以可以指定字符串的字节序的方式构造数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。