【问题标题】:Converting a numpy Array of 1's and 0's to Decimal (Python)将 1 和 0 的 numpy 数组转换为十进制(Python)
【发布时间】:2021-05-17 06:23:37
【问题描述】:

你好,希望你们一切都好。

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

Convert binary (0|1) numpy to integer or binary-string?

但是,由于我的数组大小为 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 numpy binary converters


    【解决方案1】:

    我很困惑,你说的是“十进制”,但我认为你的意思是整数而不是浮点数。无论如何,python 原生支持以二进制形式编写的数字:

    x = 0b011101110101000000101001101001101011100000101111111111
    print(x)
    

    “0b”告诉python下面的整数以二进制显示。如果你的二进制数是字符串,那么你需要使用 int() 函数将字符串转换为 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)
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-06-14
        • 1970-01-01
        • 2018-10-05
        • 2016-01-13
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 2014-07-21
        • 2017-04-25
        相关资源
        最近更新 更多