python 中从十进制到二进制的整数的 Numpy arrax

Numpy arrax of integers from decimal to binary in python

我有一个 numpy 数组:ch=[1, 2, 3, 4, 20, 25]

如何写成:b'\x01\x02\x03\x04\x14\x19'

注意:我不想将每个整数都转换为二进制。有什么功能可以直接一步搞定吗?

以下将起作用:

b"".join([int(item).to_bytes(1, "big") for item in ch])

首先遍历 NumPy 数组,将每个 np.int32 对象转换为 int,对其调用 int.to_bytes(),以大端顺序返回 1 个字节(您也可以使用"little" 此处),然后将它们连接在一起。

或者,您可以在数组上调用 list(),然后将其传递给内置的 bytes() 构造函数:

bytes(list(ch))

您可以使用 bytes 内置并传递序列:

>>> ch=[1, 2, 3, 4, 20, 25]
>>> bytes(ch)
b'\x01\x02\x03\x04\x14\x19'

附带说明一下,您显示的是 python 列表,而不是 numpy 数组。

但是,如果你想对 numpy 数组进行操作,你可以先将其转换为 python 列表:

>>> bytes(np.array(ch).tolist())
b'\x01\x02\x03\x04\x14\x19'

当您直接在 numpy 数组上尝试 to_bytes() 获取上述数据时:

>>> np.array(ch).tobytes()
b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x14\x00\x00\x00\x19\x00\x00\x00'

上面的输出也是对的,只是数据类型的不同,打印一下就知道是numpy.int32,也就是32位就是32/8=4字节即表示每个值所需的字节数。

>>> np.array(ch).dtype
dtype('int32')

如果将其转换为 8 位,即 1 个字节数,输出将与在列表上使用 bytes bultin 相同:

>>> np.array(ch).astype(np.int8).tobytes()
b'\x01\x02\x03\x04\x14\x19'