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]
l2 = []
while True: