结果是一样的吗?

2024-06-16 09:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将Matlab改为Python,z是一个随机复数列表]

#Original Matlab code
function h = fdpara(D,a) % D column vector
if nargin == 1 a = 0.5; end % default value
h = [a*D.*D-a*D -a*D.*D-(1-a)*D+1 -a*D.*D+(1+a)*D a*D.*D-a*D];

mu1_tr = 0
reg = zeros(1,4)

for k = 1:length(z)
    reg = [reg(2:4) z(k)]; % shift left

st_vec = [st_vec k-2+mu2_tr]; % symbol timing collection
r2 = fdpara(mu2_tr,0.5) * reg.';

注册结果

[-4.82211315e-08-2.41742009e-08j  1.04728867e-07-2.54491011e-07j, ....]
st_vec = 2, r2 = 8.367019142510646e-10 - 1.120440214253980e-07i

我在Python中尝试了这两种方法

def fdpara(D,a=0.5):
    h = [a*D*D-a*D, -a*D*D-(1-a)*D+1, -a*D*D+(1+a)*D,a*D*D-a*D]
return h



def shift(narr):
    for i in range(1,len(narr)):
        narr[i-1]=narr[i]
return narr

mu1_tr = 0
reg = np.zeros(4)

for k in range(z.size):
    reg = shift(reg)
    reg[3] = z[k]

st_vec=[st_vec,k-2+mu2_tr]
r2=fdpara(mu2_tr,0.5)*reg.T

注册结果

[-4.82211315e-08  1.04728867e-07  2.99251106e-07  1.97052411e-07]

看起来不一样,所以我改变了关于reg的看法

reg1 = np.append(reg1, z[k])
reg1 = np.delete(reg1, [0], 0)

注册结果

[-4.82211315e-08-2.41742009e-08j  1.04728867e-07-2.54491011e-07j, ....]

reg看起来是正确的,但其他变量则不同

st_vec = [[], 1] 
r2 = [-0.00000000e+00  1.04728867e-07  0.00000000e+00  0.00000000e+00]

Python代码正在工作,所以我认为它是相同的代码,但我不理解为什么r2和st_vec值不同

请告诉我你的建议。 我想检查2个代码是否产生相同的结果


Tags: 代码forshiftnpregtrstr2