在Python 3中将二进制对象的数组转换为字符串

时间:2017-06-18 19:27:19

标签: python arrays python-3.x numpy

我正在使用python-3.x,我正在尝试将numpy数组的列表“Binary's”转换为十进制数字,因为我知道我需要将这些Binary首先转换为字符串然后我可以将它们转换为Decimal例如:

1.Binary = 101011111>>> 2.String ='101011111'>>>>> 3.decimal = 351

binary= '101011111'
binary = int(binary, 2)
print (binary)

但有没有办法将Binary的直接列表转换为十进制我不想将它们转换为字符串?

1.Binary = 101011111>>> 2.decimal = 351

My input is:
Type: int64
Size:(3, 8)
Value: array:([[1,0,0,1,1,0,0,0],
               [1,1,1,1,1,0,0,0],
               [1,0,0,1,1,1,0,1]])

the output:  ([[152],
               [248],
               [157]])

1 个答案:

答案 0 :(得分:1)

由于二进制数是从数组构建的,因此每个数组位置代表一个基本值(2**n)或左移(<< n)。这与numpy的广播一起允许解决方案如下:

binary = np.array([[1, 0, 0, 1, 1, 0, 0, 0],
                   [1, 1, 1, 1, 1, 0, 0, 0],
                   [1, 0, 0, 1, 1, 1, 0, 1]])

wordlength = binary.shape[1]
shift = np.arange(wordlength-1, -1, -1)

decimal = np.sum(binary << shift, 1)

因此,我生成一个从n-10的简单范围,然后我广播并使用它来移动每个二进制数字以获得其值。然后我只是总结每个二进制数维度的值。