假設我有一個二進制字串:z = abc,其中 a,b,c 是 0 或 1,所以我們可以轉換c為從 0 到 7 的整數。現在我想給 a,b,c 另一個“層”值,其中a = 1/2^1 = 1/2,b = 1/2^2 = 1/4,c = 1/2^3 = 1/8。我的目標是創建一個字典,其中鍵是整數 0-7,值是基于 a、b、c 值的關聯計算。
我能夠解決這個問題的唯一方法是“蠻力”結果。例如,當鍵為 5(z = 101)時,值為 1/2 0 1/8 = 5/8,并手動執行所有計算,然后將專案附加到字典中。python中是否有工具/方法可以讓我更快地創建計算?我真的不知道我該怎么做。任何建議/幫助表示贊賞。
uj5u.com熱心網友回復:
一種天真的方法是遍歷位串,并將每個位乘以 0.5 的匹配冪:
res = 0
for i, bit in enumerate(z, 1):
res = int(bit) * 0.5**i
因為z = "101"這將給出res0.625 這是5/8
可以使用壓縮sum:
res = sum(int(bit) * 0.5**i for i, bit in enumerate(z, 1))
如果z實際上是一個整數,只需將z上面的 s 更改為format(z, 'b')即可獲得其二進制字串表示。
uj5u.com熱心網友回復:
只是為了詳細說明我的評論:
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
>>>
這是你要找的輸出嗎?
uj5u.com熱心網友回復:
另一種方法是有利于矢量化:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431521.html
上一篇:將文本讀取為注釋而不是字串
