将 1 和 0 的 numpy 数组转换为十进制 (Python)



大家好,希望大家都过得好。

我现在正在做一个小作业。我有一个二进制数的字符串,我需要把它转换成十进制数。我将字符串转换为numpy数组,然后尝试我在这个链接的答案中看到的内容:

将二进制(0|1)numpy转换为整数或二进制字符串?

然而,由于我的数组的大小为54,解决方案不能正常工作,我得到负的结果,而正确的值是一个非常大的正数。

# data_binary = [0 1 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1]
data_decimal = data_binary.dot(1 << np.arange(data_binary.size)[::-1])

例如,在这个实例中,data_binary的十进制等效值是"8395915512384511",但是我的脚本将其计算为"1773014015"

你能建议我用什么方法来达到我的目标吗?提前谢谢你!

我糊涂了,你说的是"小数";但我想你指的是整数而不是浮点数。在任何情况下,python原生支持以二进制形式写入的数字:

x = 0b011101110101000000101001101001101011100000101111111111
print(x)

"0 b"告诉python下面的整数以二进制形式显示。如果二进制数是字符串,则需要使用int()函数将字符串转换为整型:

x = int('011101110101000000101001101001101011100000101111111111',2)
print(x)

您得到的是1773014015,因为您使用的是"int32",因此对条目进行手动运算将导致循环。如果你使用"int64"你得到了正确答案。

import numpy as np
x = np.array([0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1])
y = (x*2**np.arange(53,-1,-1,dtype='int64')).sum()
print(y)
y = x.dot(1 << np.arange(x.size,dtype='int64')[::-1])
print(y)

因为已经给出了一个numpy解。这是一个python的方法。

sum([j*(2**i) for i,j in list(enumerate(reversed(c)))])
8395915512384511

c是二进制数列表所在的位置。

相关内容

  • 没有找到相关文章

最新更新