如何以二进制格式打印numpy数组

4 投票
5 回答
7142 浏览
提问于 2025-04-18 03:04

我有一个这样的numpy数组:

a = np.array([[1,2,3,4 ,11, 12,13,14,21,22,23,24,31,32,33,34 ]], dtype=uint8)

当我打印这个数组时,得到的输出是:

[[ 1  2  3  4 11 12 13 14 21 22 23 24 31 32 33 34]]

我该如何将输出转换成二进制表示呢?

比如说:

[[ 00000001  00000010  00000011  00000100 ...]]

5 个回答

1

对于uint8类型的数据,你可以使用numpy库里自带的unpackbits函数。(正如@ysakamoto提到的)

首先,你需要把数组调整成只有一列的样子。

然后就可以按照下面的方式使用unpackbits函数了。

a = numpy.array([[1,2,3,4 ,11, 12,13,14,21,22,23,24,31,32,33,34 ]], dtype="uint8")
print(numpy.unpackbits(a.reshape(-1,1), axis=1))

输出结果:

[[0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 1],
[0, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 1],
[0, 0, 0, 0, 1, 1, 1, 0],
[0, 0, 0, 1, 0, 1, 0, 1],
[0, 0, 0, 1, 0, 1, 1, 0],
[0, 0, 0, 1, 0, 1, 1, 1],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 1, 1],
[0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 1],
[0, 0, 1, 0, 0, 0, 1, 0]]
1

这样怎么样?

a = np.array([[1,2,3,4 ,11, 12,13,14,21,22,23,24,31,32,33,34 ]], dtype=uint8)
print [bin(n) for n in a[0]]

使用numpy的 unpackbits,这个方法也可以。

A=np.unpackbits(a, axis=0).T
print [''.join(map(str,a)) for a in A]
2

这段代码会按照你需要的方式输出结果。

[bin(x)[2:].zfill(8) for x in a]

输出结果

['00000001', '00000010', '00000011']
5

你可以使用 numpy.binary_repr 这个工具。

它的作用是接收一个数字,然后把这个数字转换成二进制形式的字符串。你还可以把这个功能进行“向量化”,这样它就可以接收一个数组作为输入了:

np.vectorize(np.binary_repr)(a, width=8)
2

试试这个。

np.array(map(bin, a.flatten())).reshape(a.shape)

撰写回答