我有一个尺寸为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维作为二进制字符串进行二进制到十进制的转换。
答案 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)