如何在二进制表示模式下打印numpy数组

时间:2014-04-17 04:36:50

标签: python numpy binary

我有一个跟随numpy数组

  

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

当我打印时,我得到以下输出

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

如何以二进制表示形式获得输出?

例如

[[ 00000001  00000010  00000011  00000100 ...]]

5 个答案:

答案 0 :(得分:2)

这是你所要求的

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

out put

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

答案 1 :(得分: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 :(得分:1)

试试这个。

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

答案 3 :(得分:1)

您可以使用numpy.binary_repr

它接受一个数字作为输入并将其二进制表示作为字符串返回。您可以对此函数进行矢量化,以便它可以将数组作为输入:

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

答案 4 :(得分:0)

对于uint8,您可以使用内置的numpy函数unpackbits。 (正如@ysakamoto提到的) 第一个重塑数组,因此它是1列宽。 之后,按如下所述使用解包。

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]]