有没有更快的方法可以计算 python 中的二元运算?

Is there a faster way I can calculate binary operation in python?

假设我有一个二进制字符串:z = abc,其中 a,b,c 要么是 0 要么是 1,所以我们可以将 c 转换为 0 到 7 之间的整数。现在我想要给 a,b,c 另一个 'layer' 的值,其中 a = 1/2^1 = 1/2,b = 1/2^2 = 1/4,c = 1/2^3 = 1 /8。我的目标是创建一个字典,其中键是整数 0-7,值是基于 a、b、c 值的关联计算。

我能够解决这个问题的唯一方法是 'brute force' 结果。例如,当键为 5 (z = 101) 时,值将为 1/2+0+1/8 = 5/8,并手动执行所有计算,然后将项目追加到字典中。 python 中是否有工具/方法可以让我更快地创建计算?我真的不知道我该怎么做。任何建议/帮助表示赞赏。

一种天真的方法是迭代 bit-string,然后将每一位乘以 0.5 的匹配幂:

res = 0
for i, bit in enumerate(z, 1):
    res += int(bit) * 0.5**i

对于 z = "101" 这将给出 res 作为 0.625 即 5/8


可以使用sum压缩:

res = sum(int(bit) * 0.5**i for i, bit in enumerate(z, 1))

如果z实际上是一个整数,只需将上面的z更改为format(z, 'b')即可得到它的二进制字符串表示。

稍微详细说明一下我的评论:

for key, value in {bin(key)[2:]: key/8 for key in range(8)}.items():
    print(f"{key:>3}: {value}")

输出:

  0: 0.0
  1: 0.125
 10: 0.25
 11: 0.375
100: 0.5
101: 0.625
110: 0.75
111: 0.875
>>> 

这是您要查找的输出吗?

另一种方法是有利于矢量化:

import numpy as np
num =[1,0,1] 
d = np.array(num)
r = 1 / np.logspace(1, len(num), num=len(num), base=2)
np.matmul(r,d)

输出:

> 0.625