在python中用Numpy arrax将整数从十进制转为二进制

1 人关注

我有一个numpy数组。【替换代码0

我怎么能把它写在。替换代码1

注意:我不想把每个整数转换为二进制。有什么函数可以直接一步到位吗?

2 个评论
ch是一个numpy数组
import numpy as geek ch=geek.array([1, 2, 3, 4, 20, 25]) x=bytes(ch) print(x)
python
python-3.x
numpy
numpy-ndarray
litun bls
litun bls
发布于 2021-08-09
2 个回答
ThePyGuy
ThePyGuy
发布于 2021-08-09
已采纳
0 人赞同

你可以使用 bytes bult-in并传递序列。

>>> 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'
    
This doesn't work for me. I get 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'
Working fine on Python 3.7.5 win10
你在对一个列表进行操作。OP特别指出了一个NumPy数组。
@MattDMo,但提出的输入不是一个numpy数组。
我们怎样才能改变小英迪恩或大英迪恩?
MattDMo
MattDMo
发布于 2021-08-09
0 人赞同

The following will work:

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