所以我试图在生成一些伪随机数序列时将此matlab代码转换为python代码。但是我最初从matlab代码和python代码获得的结果略有不同,直到在相当长的一段时间(例如:在第500个序列)上,它的确有太大差异。如何获得与Matlab代码中的数字完全相同的数字?
我有点理解,这个问题与matlab和python中的舍入差异有关。而在matlab上,它似乎将其四舍五入到小数点后四舍五入,而python则将其四舍五入。我尝试用round(a,4)对伪随机数序列的每个操作进行四舍五入,但这只是使其与众不同。请帮助我,我做错了什么?
这是matlab代码
x=0.21;
u=0.399;
d=43;
N0=500;
L= N0+256;
xx=zeros(1,L);
for i=1:L
if x<0.5
x=(4-u)/4*sin(pi*x)+u/2*x;
else
x=(4-u)/4*sin(pi*x)+u/2*(1-x);
end
xx(i)=x;
end
这是python代码
import numpy as np
def stmap(u,x,n):
seq=[]
for i in range(n):
if x<0.5:
st=(4-u)/4*np.sin(np.pi*x)+u/2*x
else:
st=(4-u)/4*np.sin(np.pi*x)+u/2*(1-x)
seq.append(st)
x=seq[i]
return seq
d=43
n=500
x=0.21
u=0.399
X=stmap(u,x,n+256)
我希望得到与我从Matlab代码获得的序列完全相同的结果。
编辑:结果样本
您的代码没有错。
我只是在Matlab R2018b和Python 3.8上运行了您的代码,但从这两者中得到了相同的结果。
您正在使用哪个版本?尝试更新numpy或python版本。
曾经有一次我在使用NetworkX的python中使用Network Flow,在一个python版本中总是给我相同的结果,但是在另一版本的python中,当我运行代码时,它给了我2种不同类型的结果,这是由于python版本的字典实现。
Python 3.8:[0.593664575051092、0.94261955640344、0.17285434621733425、0.4996789845333007、0.9999354996049383、0.00019528905660978638 ...
Matlab R2018:0.593664575051092 0.942619556403440 0.172854346217334 0.499678984533301 0.999935499604938 ...