如何从字符串创建numpy数组?

10 投票
3 回答
15108 浏览
提问于 2025-04-16 06:30

我有一个文件读取器,它可以从文件中读取 n 个字节,并返回一个表示这些(二进制)数据的字符字符串。我想把这 n 个字节读入一个 numpy 数组中,然后对它进行快速傅里叶变换(FFT),但是我在从字符串创建数组时遇到了问题。如果能给我几行示例代码就太好了。

编辑:我正在读取原始的二进制数据,所以我得到的字符串看起来像 '\x01\x05\x03\xff'...。我想把它变成 [1, 5, 3, 255]

3 个回答

1

不知道你输入的是什么内容,确实很难处理。不过,如果输入的是用逗号分隔的整数,你可以这样做:

myInts = map(int, myString.split(','))
5
>>> '\x01\x05\x03\xff'
'\x01\x05\x03\xff'
>>> map(ord, '\x01\x05\x03\xff')
[1, 5, 3, 255]
>>> numpy.array(map(ord, '\x01\x05\x03\xff'))
array([  1,   5,   3, 255])

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

21

在Python 2中,你可以直接使用 numpy.fromstring 来完成这个操作:

import numpy as np
s = '\x01\x05\x03\xff'
a = np.fromstring(s, dtype='uint8')

完成后,a 的值会变成 array([ 1, 5, 3, 255]),然后你就可以使用常规的scipy/numpy FFT函数了。

在Python 3中,由于默认使用Unicode字符串,你需要将数据作为字节字符串读取,并使用 frombuffer 命令来代替:

import numpy as np
s = b'\x01\x05\x03\xff'
a = np.frombuffer(s, dtype='uint8')

这样就能得到相同的结果。

撰写回答