代码拉取完成,页面将自动刷新
同步操作将从 openKylin/cybersectookits 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- coding: utf-8 -*-
"""
@Time : 2022/5/14 13:39
@Author : Mr Wang
@FileName: UE_2.py
@SoftWare: PyCharm
"""
from decimal import Decimal
import numpy as np
number=45211 #随机数数量
bits=20 #多少位
# rnd_list =[] # 存随机数
binary_list = [0]*number # 转化为二进制列表
final = [0] * number # 随机响应后的十进制
# def rnd(data):
# rnd_list.append(data)
# return rnd_list
def change(n, pre=19):
'''
把一个带小数的十进制数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:
if n == 0: break
x, y = divmod(n, 2) # x为商,y为余数
l2.append(y)
n = x
string_number = ''.join([str(j) for j in l2[::-1]])
return int(string_number)
def change2(n, pre=8):
'''
把一个带小数的二进制数n转换成十进制
小数点后面保留pre位小数
'''
string_number1 = str(n) # number1 表示二进制数,number2表示十进制数
decimal = 0 # 小数部分化成二进制后的值
flag = False
for i in string_number1: # 判断是否含小数部分
if i == '.':
flag = True
break
if flag: # 若二进制数含有小数部分
string_integer, string_decimal = string_number1.split('.') # 分离整数部分和小数部分
for i in range(len(string_decimal)):
decimal += 2 ** (-i - 1) * int(string_decimal[i]) # 小数部分化成二进制
number2 = int(str(int(string_integer, 2))) + decimal
return round(number2, pre)
else: # 若二进制数只有整数部分
return int(string_number1, 2) # 若只有整数部分 直接一行代码二进制转十进制
def perturb1(epsilon, value, m, n=2):
p = 1 / 2 # 概率p
np.random.seed(m)
# 以p的概率生成value,1-p的概率非value
p = np.array([p, 1 - p])
index = np.random.choice([value, 1 - value], p=p.ravel())
return str(index)
def perturb2(epsilon, value, m, n=2):
p = np.e ** (epsilon / (number * bits)) / (np.e ** (epsilon / (number * bits)) + n - 1) # 概率p
np.random.seed(m)
# 以p的概率生成value,1-p的概率非value
p = np.array([p, 1 - p])
index = np.random.choice([value, 1 - value], p=p.ravel())
return str(index)
def main(rnd_list):
# print(rnd_list)
# print(len(rnd_list))
binary_perturb = [0]*number
for i in range(0, number):
binary_list[i] = change(rnd_list[i])
integer = str(binary_list[i]).split('.')[0]
fraction = str(binary_list[i]).split('.')[1]
fraction = fraction.ljust(19, '0')
integer = integer.rjust(1, '0')
str0 = integer + '.' + fraction
binary_list[i] = str0
#都是正数
# if rnd_list[i] < 0:
# str0 =str0
# else:
# str0 = str0
str00=str0.replace('.','')
binary_list[i]=str00
aa=''.join(binary_list)
# print(binary_list)
# print(len(aa))
bb=[0]*(number*bits)
for i in range(len(aa)):
if aa[i] == '1':
bb[i] = perturb1(1, int(aa[i]), i)
if aa[i] == '0':
bb[i] = perturb2(1, int(aa[i]), i)
# print(len(bb))
# print(bb)
oplist=[]
for i in range(0,number):
for j in range(i*bits,(i+1)*bits):
oplist.append(bb[j])
oplist[1:1]=['.']
# print(oplist)
str1=''.join(oplist)
binary_perturb[i]=str1
#都是正数
# str1 = str1[1:]
# print(str1)
# if oplist[0] == '1':
# final[i] = 0 - change2(str1)
# else:
final[i] = change2(str1)
oplist=[]
# print(binary_perturb)
# print(final)
return final
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。