将1和0的int数组转换为相应的十进制数

时间:2019-07-11 12:54:07

标签: python numpy binary

我有一个尺寸为100x128的2D数组。这由dtype int64的1和0组成。我需要将其转换为每列为8位的16个符号,并带有相应的十进制数字。

例如,在较小的比例下,考虑使用2位符号的5x8情况。

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

[0 1 1 0 1 0 1 1],

[1 0 1 0 1 1 0 0],

[1 0 1 1 0 1 1 0],

[1 1 0 0 0 1 0 1]]  

我需要将其转换为

[[2 1 1 1],

[1 2 1 3]

[2 2 3 0],

[2 3 1 2],

[3 0 1 1]]. 

因此,在我的情况下,我需要首先将128位的每一行划分为8位块,并获取相应二进制数的十进制值,这应该给我100x16 2D数组。

我首先尝试将(100,128)2D数组重塑为(100,16,8)3D数组。但是我不确定如何将第3维作为二进制字符串进行二进制到十进制的转换。

2 个答案:

答案 0 :(得分:2)

您可以reshape,将每个2位序列的矩阵乘积与2**np.arange(n_bits)中的相应值相乘,这可以使用@运算符来完成,然后{再次{1}}:

reshape

答案 1 :(得分:2)

假设您使用的是numpy,则可以执行以下操作:

bits_count = 2
bit_weights = 2**np.arange(2)[::-1]
data = np.array([[1, 0, 0, 1, 0, 1, 0, 1],
 [0, 1, 1, 0, 1, 0, 1, 1], 
 [1, 0, 1, 0, 1, 1, 0, 0],
 [1, 0, 1, 1, 0, 1, 1, 0],
 [1, 1, 0, 0, 0, 1, 0, 1]]
) 
(data.reshape((data.shape[0], -1, 2)) * bit_weights).sum(axis=2)