为什么matlab代码在python中给出不同的结果?

问题描述 投票:0回答:1

所以我试图在生成一些伪随机数序列时将此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代码获得的序列完全相同的结果。

python-3.x matlab rounding
1个回答
-1
投票

编辑:结果样本

您的代码没有错。

我只是在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 ...

© www.soinside.com 2019 - 2024. All rights reserved.