2017-11-11 67 views
1

我是Python新手。我有像下面的matlab脚本。我想在matlab脚本中将矩阵3D重写为python 3.x语言。我该如何解决它?如何在Python中重写矩阵3D matlab脚本

nl=length(res); 
ndat=length(per); 
phi=atan(1)*4; 
amu=phi*4e-7; 

for i=1:ndat 
    for j=1:nl 
    z=sqrt(phi*amu*res(j)/per(i)); 
    zz(j)=complex(z,z); 
    exp0=exp((-2)*zz(j)/res(j)*thi(j)); 
    exp1=complex(1,0)+exp0; 
    exp2=complex(1,0)-exp0; 

    %matrix 3D 
    ldi(1,1,j)=exp1; 
    ldi(1,2,j)=zz(j)*exp2 
    ldi(2,1,j)=exp2/zz(j); 
    ldi(2,2,j)=exp1;` 
    end 
end 
+1

看看'numpy'。 – harandk

回答

1

你会发现你的代码(见下文)的一个独立的实施,有几个关键的不同:

  1. Python的索引从0而不是一个

  2. Python的开始索引使用方括号代替圆括号

  3. 必须从库中导入数学函数(这里是数学CMATH

祝你好运!

import math 
import cmath 

# Data 
res = [1, 4, 1, 2, 3] 
per = [5, 5, 1, 1, 0.5, 0.6] 
thi = [1, 2, 3, 4, 5, 6] 
nl = len(res) 
ldi = [[[0 for x in range(nl)],[0 for x in range(nl)]], [[0 for x in range(nl)],[0 for x in range(nl)]]] 
zz = [0]*nl 


nl = len(res) 
ndat = len(per) 
phi = math.atan(1)*4 
amu = phi*4e-7 

for i in range(ndat): 
    for j in range(nl): 
    z = math.sqrt(phi*amu*res[j]/per[i]) 
    zz[j] = complex(z,z) 
    exp0=cmath.exp((-2)*zz[j]/res[j]*thi[j]); 
    exp1=complex(1,0)+exp0; 
    exp2=complex(1,0)-exp0; 

    #- matrix 3D 
    ldi[0][0][j]=exp1; 
    ldi[0][1][j]=zz[j]*exp2 
    ldi[1][0][j]=exp2/zz[j] 
    ldi[1][1][j]=exp1 
+1

看到它在普通Python中看起来很有趣,但是在从matlab转换时你应该使用numpy。 –

+0

@EricDuminil。我同意。我保持在OP的水平,因为他们似乎是Python中的完整初学者。 – Laure