【问题标题】:How to change a binary numpy array into an int? [duplicate]如何将二进制 numpy 数组更改为 int? [复制]
【发布时间】:2021-07-20 00:56:11
【问题描述】:

我的任务是将包含二进制数的数组转换为十进制数。 我的数组代码如下所示:

koo = np.random.randint(2, size=10)
print(koo)

输出示例为:

[1 0 1 0 0 0 0 0 1 0]

而我要做的是把它变成一个字符串(1010000010),然后再把它变成一个十进制数(642)。有什么方法可以做到这一点?

对于这个任务我必须用数组创建它,我不能使用 np.binary_repr()

我已经尝试使用here 提供的解决方案来解决它,但是在处理它时,数字会与真实的数字大不相同(即:根据程序,1011111010 是 381,而实际上它是 762)

有人知道如何解决这个问题吗?提前谢谢!

【问题讨论】:

  • 试试koo.dot(1 << np.arange(koo.size)[::-1])

标签: python arrays numpy binary


【解决方案1】:

首先,通过简单地附加元素将 Numpy 数组转换为字符串。 然后,使用int(),使用 2 的基数重铸字符串。

koo = np.random.randint(2, size=10)
print(koo)
binaryString = ""
for digit in koo:
    binaryString += str(digit)
print(binaryString)
decimalString = int(binaryString, base=2)
print(decimalString)

运行示例:

[0 0 1 0 1 0 0 0 0 0]
0010100000
160

【讨论】:

    【解决方案2】:

    您可以使用列表推导从头到尾枚举数字,然后计算以十为底的数字,然后求和。例如:

    np.sum([digit * 2 ** i for i, digit in enumerate(koo[::-1])])

    【讨论】:

      【解决方案3】:
      >>> koo = np.random.randint(2, size=10)
      >>> koo
      array([1, 1, 0, 0, 0, 0, 1, 1, 1, 1])
      
      >>> binary_string =  ''.join(koo.astype('str').tolist())
      >>> binary_string
      '1100001111'
      
      >>> binary_val = int('1100001111', 2)
      >>> binary_val
      783
      

      【讨论】:

      • 你不需要.tolist()str.join() 会很乐意使用任何可迭代对象,一个 numpy 数组就是其中之一。
      猜你喜欢
      • 2010-11-29
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 2017-05-15
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      相关资源
      最近更新 更多