numpy 如何将列表列表转换为字节?

oknrviil  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(108)

我有一个浮点数列表,我想把它转换成字节。能请一些帮助我做到这一点。例如

l = [[0.1, 1.0, 2.0], [2.0, 3.1, 4.1]]

我想要的是

bytes(l) -> b'\x01\x02\x03.......'
llew8vvj

llew8vvj1#

由于您已标记了此numpy,因此它只是tobytes

a = np.array(l)
a.tobytes()
b'\x9a\x99\x99\x99\x99\x99\xb9?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00@\xcd\xcc\xcc\xcc\xcc\xcc\x08@ffffff\x10@'

可以使用frombuffer将此结果重新处理为ndarray,但不会保持原始形状。

bqjvbblv

bqjvbblv2#

希望这是你想要的:

import struct

input = [[0.1, 1.0, 2.0], [2.0, 3.1, 4.1]]
outs = list()
string = ""

for i in input:
    for j in i:
        outs.append(bytes(struct.pack("f", j)))

for i in outs:
    string += str(i)
    print(i)

print('Bytes:', string)
v64noz0r

v64noz0r3#

这才是问题的正确答案。有内置的Python解决方案不需要依赖于numpy,这就是最初的问题所问的。以下是正确的解决方案:
首先:将列表的列表转换为单个列表,使用

from itertools import chain
matrix = [[1,2,3,4],[5,6,7,8]]
array_1d = list(chain.from_iterable(matrix))
assert array_1d == [1, 2, 3, 4, 5, 6, 7, 8]

下一步:将Python原生类型列表(本例中为int)转换为字节:

b = bytes(array_1d)
assert b == b'\x01\x02\x03\x04\x05\x06\x07\x08'

相关问题