首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将二进制字符串转换为numpy数组

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

Stack Overflow用户
提问于 2012-08-01 21:14:38
回答 2查看 37.2K关注 0票数 31

假设我有一个字符串:

代码语言:javascript
复制
my_data = '\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'

我从哪里得到它是无关紧要的,但为了有一些具体的东西,假设我从一个二进制文件中读取了它。

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

代码语言:javascript
复制
import struct
import numpy as np
tple = struct.unpack( '4f', my_data )
my_array = np.array( tple, dtype=np.float32 )

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

编辑

我还希望能够以这样一种方式构造数组,即我可以指定字符串的字节顺序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-01 21:19:31

代码语言:javascript
复制
>>> 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)

或者,如果你想要大端的:

代码语言:javascript
复制
>>> 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)

当然,在Python3之前,b不是必需的。

实际上,如果您实际使用的是一个二进制文件来加载数据,那么您甚至可以跳过使用字符串的步骤,直接使用numpy.fromfile()从文件加载数据。

还有,数据类型引用,以防万一:http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

票数 43
EN

Stack Overflow用户

发布于 2020-12-06 07:38:05

np.fromstring()已弃用。请改用np.frombuffer()

代码语言:javascript
复制
import numpy as np

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

# np.fromstring is deprecated
# data = np.fromstring(my_data, np.float32)
data = np.frombuffer(my_data, np.float32)

print(data)
代码语言:javascript
复制
[1. 2. 3. 4.]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11760095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档