在一个数据处理任务中,我需要将一个巨大的字节元组列表转换为一个数字numpy.ndarray。该列表的长度为over 10 Millions,由包含3个450字节序列的元组组成,如下图所示
[
(
b'\n\x0f\n\t\x0c\x00\x00\x01\x07\x06...', # 450 bytes series
b'\x00\x0e\x00\x06\x07\x0c\n\x0e\x07...', # also 450 bytes
b'\x05\x0e\x07\t\x04\x01\x05\x07\x08...',
), # 3-byte-serie tuple
(...), # more tuples like this
... # the number of tuples is up to 10M
]
字符串
我希望得到的是一个numpy.uint8数组,其形状为(10Ms,3,450),其中每个uint8元素对应于序列中的一个字节(例如b'\n\x0f\n\t'
到[10,15,10,9])。
或者简单地说,我在寻找一个与元素numpy.ndarray.tobytes
相反的函数
当然,这可以通过在raw python中使用for
编写一个简单的迭代来实现,用numpy.fromiter
逐个将字节序列转换为一维数组。但是由于数据量巨大,我希望使用numpy来尽可能地加速这个过程。所以我想要的是一个直接的numpy函数,或者用几个numpy函数编写代码,而不需要任何raw python for
迭代。
我也尝试过将合并numpy.fromiter
和np.frompyfunc
结合起来,并在np.array(..., dtype = object)
生成的numpy字节数组上使用它,但它似乎仍然不够快。
1条答案
按热度按时间7rtdyuoh1#
np.frombuffer
可能就是你要找的:字符串
我希望这对你有帮助!