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'
我有一个 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'