UE 中概率如下

LATENT中方法UER概率如下

对于公式理解,哪个概率对应着1变1,1变0...见下图

代码实现思路就是先把十进制转为二进制,对二进制串根据概率扰动,最后再转为十进制
UE代码
# -*- coding: utf-8 -*-
"""
@Time : 2022/1/16 14:03
@Author : Mr Wang
@FileName: RR.py
@SoftWare: PyCharm
"""
from decimal import Decimal
import numpy as np
rnd_list = [0] * 100 # 存随机数
binary_list = [0]*100 # 转化为二进制列表
final = [0] * 100 # 随机响应后的无符号十进制
def random():
import random
for i in range(0, 100):
rnd = random.uniform(-100.0, 100.0)
rnd5 = round(rnd, 2) # 小数控制位数
rnd_list[i] = rnd5
# print(rnd_list)
def change(n, pre=24):
'''
把一个带小数的十进制数n转换成二进制
小数点后面保留pre位小数
'''
string_number1 = str(n) # number1 表示十进制数,number2表示二进制数
flag = False
for i in string_number1: # 判断是否含小数部分
if i == '.':
flag = True
break
if flag:
string_integer, string_decimal = string_number1.split('.') # 分离整数部分和小数部分
integer = int(string_integer)
decimal = Decimal(str(n)) - integer
l1 = [0, 1]
l2 = []
decimal_convert = ""
while True:
if integer == 0: break
x, y = divmod(integer, 2) # x为商,y为余数
l2.append(y)
integer = x
string_integer = ''.join([str(j) for j in l2[::-1]]) # 整数部分转换成二进制
i = 0
while decimal != 0 and i < pre:
result = int(decimal * 2)
decimal = decimal * 2 - result
decimal_convert = decimal_convert + str(result)
i = i + 1
string_number2 = string_integer + '.' + decimal_convert
return string_number2
else: # 若十进制只有整数部分
l1 = [0, 1]

博客探讨了LDP协议中的UE(一元编码)和LATENT方法中的UER实现,涉及概率计算和编码转换过程。通过将十进制数转化为二进制,依据预设概率进行扰动,然后重新转换回十进制,实现编码的扰动。文章提供了UE和UER的代码示例。
最低0.47元/天 解锁文章
533





