我正在使用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]])
答案 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-1
到0
的简单范围,然后我广播并使用它来移动每个二进制数字以获得其值。然后我只是总结每个二进制数维度的值。