如何在Python中重写矩阵3D matlab脚本
问题描述:
我是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
答
你会发现你的代码(见下文)的一个独立的实施,有几个关键的不同:
Python的索引从0而不是一个
Python的开始索引使用方括号代替圆括号
必须从库中导入数学函数(这里是数学和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
看看'numpy'。 – harandk