【发布时间】:2012-02-11 07:11:54
【问题描述】:
我是 C 和 MATLAB 用户。当我(一周前)开始学习 Python 时,我注意到我没有充分发挥 MATLAB 的潜力,尤其是数组运算。我经常使用 for 循环,可能是因为我学过 C 语言。
在之前的一个技巧中,我学会了使用cumsum和其他高效的数组操作,例如:
alpha = [1e-4,1e-3,1e-4,1e-1,1e-2,1e-3,1e-6,1e-3];
zeta = alpha / (dz*dz)
nz = 101
l=[0.3,0.1,0.2,0.1,0.1,0.1,0.2];
wz = cumsum(l*(nz-1));
nl = lenght(l);
是否可以在 Python (Numpy) 或 MATLAB 中简化以下代码?
A = zeros(nz,nz);
i=1;
for j = 2:wz(i)-1
A(j,j-1) = zeta(1,1);
A(j,j) = -2*zeta(1,1);
A(j,j+1) = zeta(1,1); % layer 1 nodes
end
%cicle to n-layers
for i=2:nl
for j=wz(i-1):wz(i-1)
A(j,j-1) = zeta(1,i-1);
A(j,j) = -zeta(1,i-1)-zeta(1,i);
A(j,j+1) = zeta(1,i);
end
for j=wz(i-1)+1:wz(i)
A(j,j-1) = zeta(1,i);
A(j,j) = -2*zeta(1,i);
A(j,j+1) = zeta(1,i);
end
end
end
【问题讨论】:
-
如果你能用一两句话解释代码应该做什么,而不只是给我们简单的代码,对我们来说会更容易......
-
@Hans 此代码属于应用于多层的一维方程热求解器。 alpha 是具有每层扩散率的数组,l 是具有每层高度的数组,wz 是聚合点(离散点)的累积和的数组,A 是“状态矩阵”。计算状态矩阵后,我将实现 ode 求解器。
-
@marco:如果您没有意识到,MATLAB 内置了各种 ODE solvers,而对于 Python,您可以在 Scipy 中找到 ODE 求解器。
-
我将使用内置的 ODE 求解器。但矩阵 A 是求解器的输入。这段代码是正确的(解决了问题),但效率不高。
标签: python arrays matlab for-loop numpy