有没有更快的方法可以计算 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
假设我有一个二进制字符串: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