博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab和python转换_将MATLAB代码转换为Python:Python类型和操作顺序
阅读量:6280 次
发布时间:2019-06-22

本文共 1931 字,大约阅读时间需要 6 分钟。

这是RainbowCrack作者的MATLAB函数:

function ret = calc_success_probability(N, t, m)

arr = zeros(1, t - 1);

arr(1) = m;

for i = 2 : t - 1

arr(i) = N * (1 - (1 - 1 / N) ^ arr(i - 1));

end

exp = 0;

for i = 1 : t - 1

exp = exp + arr(i);

end

ret = 1 - (1 - 1 / N) ^ exp;

在给定具有键空间N,大无符号整数,长度链t和链数的彩虹表的情况下,它计算找到明文密码成功的概率m。

运行示例:

calc_success_probability(80603140212, 2400, 40000000)

返回0.6055。

我很难将其转换为Python。在Python 3中,不再有最大整数,所以N这不是问题。我认为在计算中,我必须将所有内容强制设置为较大的浮点数,但我不确定。

我也不知道MATLAB中的运算顺序。我认为代码是这样说的:

创建大小为[1 .. 10]的数组,以便十个元素用零初始化该数组的每个元素

在基于零的索引中,我认为这是array[0 .. t-1],就像MATLAB使用1作为第一个(第0个)索引一样。

然后将数组的第二个元素(基于0的索引)初始化为m。

对于数组中的每个元素,pos=1(从0开始的索引)为t-1:

array[pos] = N * (1 - (1 - 1/N) ** array[pos-1]

**电力运营商在哪里。我认为权力是^在MATLAB,这样N * (1 - (1-1/N)的array[pos-1]力量是像上面。

然后设置一个指数。对于数组0至t-1:中的每个元素,指数为指数+ 1

返回概率=1 - (1 - 1/N)exp的幂;

我的Python代码看起来像这样,并且不起作用。我不知道为什么,但是可能是因为我对MATLAB或Python的理解不够,或者我以某种方式读错了数学,而MATLAB中发生的事情并不是我所期望的,即我的操作顺序和/或类型错误,无法正常工作,而我在这些方面缺少某些东西...

def calc_success_probability(N, t, m):

comp_arr = []

# array with indices 1 to t-1 in MATLAB, which is otherwise 0 to t-2???

# range with 0, t is 0 to t excluding t, so t here is t-1, t-1 is up

# to including t-2... sounds wrong...

for i in range(0, t-1):

# initialize array

comp_arr.append(0)

print("t = {0:d}, array size is {1:d}".format(t, len(comp_arr)))

# zero'th element chain count

comp_arr[0] = m

for i in range(1, t-1):

comp_arr[i] = N * (1 - (1 - 1 / N)) ** comp_arr[i-1]

final_exp = 0

for i in range(0, t-1):

final_exp = final_exp + comp_arr[i]

probability = (1 - (1 - 1 / N)) ** final_exp

return probability

解决方案

注意你的括号!您已经翻译了:

arr(i) = N * ( 1 - ( 1 - 1 / N ) ^ arr(i - 1) );

对此:

comp_arr[i] = N * ( 1 - ( 1 - 1 / N ) ) ** comp_arr[i-1]

我已经整理了所有内容,以便您可以更好地了解问题所在。您已将支架移到错误的位置。

它应该是:

comp_arr[i] = N * ( 1 - ( 1 - 1 / N ) ** comp_arr[i-1] )

同样,

ret = 1 - (1 - 1 / N) ^ exp;

与...不同

probability = (1 - (1 - 1 / N)) ** final_exp

这应该是

probability = 1 - (1 - 1 / N) ** final_exp

转载地址:http://qrjva.baihongyu.com/

你可能感兴趣的文章
windows下安装redis
查看>>
CentOS7 yum 安装git
查看>>
启动日志中频繁出现以下信息
查看>>
httpd – 对Apache的DFOREGROUND感到困惑
查看>>
分布式锁的一点理解
查看>>
idea的maven项目,install下载重复下载本地库中已有的jar包,而且下载后jar包都是lastupdated问题...
查看>>
2019测试指南-web应用程序安全测试(二)指纹Web服务器
查看>>
树莓派3链接wifi
查看>>
js面向对象编程
查看>>
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
使用Swagger2构建强大的RESTful API文档(2)(二十三)
查看>>
Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
(转)第三方支付参与者
查看>>
程序员修炼之道读后感2
查看>>