我想在python中编写相当于Matlab中此代码的内容,
zeta = zeros(1,5)
alpha=[1e5,1e3,1e5,1e7,1e3];
dz = 0.001;
for i=1:length(zeta)
zeta(i) = alpha(i)/(dz*dz);
end
编辑: 感谢所有答案,它们都非常有用,并且正在帮助理解python如何工作,并且似乎也是Matlab;因为我没有得到数组和矩阵运算的全部功能。我最初的编程语言是C。
现在,我正在尝试计算如何在python循环和数组操作中进行编码。如果你能提供帮助。 (zeta来自前面的代码)
nl= 7;
l=[0.3,0.1,0.2,0.1,0.1,0.1,0.3)
wz=zeros(1,nl); %layer width
temp=0; %auxiliary temp variable
for i=1:nl
wz(i)=l(1,i)*(nz-1)+temp;
temp=wz(1,i);
end
答案 0 :(得分:6)
import numpy as np
alpha = np.array([1e5, 1e3, 1e5, 1e7, 1e3])
dz = 0.001
zeta = alpha / dz**2
答案 1 :(得分:3)
尝试使用明确的for
循环:
zeta = [0] * 5
alpha = [1e5, 1e3, 1e5, 1e7, 1e3]
dz = 0.001
for i in range(len(zeta)):
zeta[i] = alpha[i] / (dz*dz)
或者,使用列表推导(这个应该更快):
alpha = [1e5, 1e3, 1e5, 1e7, 1e3]
dz = 0.001
zeta = [a/(dz*dz) for a in alpha]
请注意,我没有使用NumPy,只使用纯Python。
答案 2 :(得分:3)
将代码翻译为python
:
alpha = [1e5,1e3,1e5,1e7,1e3]
dz = 0.001
zeta = [i/(dz**2) for i in alpha]
答案 3 :(得分:3)
为了确保一切都被触及,当你使用Matlab时,你应该总是 vectorize,而这在初始代码中没有完成。因此,我建议:
zeta = zeros(1,5)
alpha=[1e5,1e3,1e5,1e7,1e3];
dz = 0.001;
for i=1:length(zeta)
zeta(i) = alpha(i)/(dz*dz);
end
实际上写成:
alpha = [1e5,1e3,1e5,1e7,1e3];
dz = 0.001;
zeta = alpha/dz^2;
然后,您在numpy中编写的代码更自然地遵循您在Matlab中编写的内容,并且同样利用了矢量化。
import numpy
alpha = numpy.array([1e5,1e3,1e5,1e7,1e3])
dz = 0.001
zeta = alpha/(dz*dz)
在这两种情况下, no 都需要预先分配。
编辑后的补充: 所以我认为第一个块中仍然存在一些错误。你有:
nl= 7;
l=[0.3,0.1,0.2,0.1,0.1,0.1,0.3)
wz=zeros(1,nl); %layer width
temp=0; %auxiliary temp variable
for i=1:nl
wz(i)=l(1,i)*(nz-1)+temp;
temp=wz(1,i);
end
你从未定义过nz,所以我猜你的意思是标量nl,(我认为)应该是l的长度(或者这只是巧合?)。就第一部分而言,我猜这是你想做的事情:
l=[0.3,0.1,0.2,0.1,0.1,0.1,0.3];
nl = length(l);
wz = cumsum(l*(nl-1));
这当然是Matlab版本,numpy版本也自然地遵循:
l = numpy.array([0.3,0.1,0.2,0.1,0.1,0.1,0.3])
n1 = len(l)
wz = numpy.cumsum(l*(n1-1))
我想澄清一点,这是你在第二部分刺入第一部分之前想要的。
答案 4 :(得分:2)
使用numpy,就像使用matlab或类似语言一样,当你可以使用基于数组的操作时,你实际上不希望使用循环而不是标记:
import numpy
zeta = numpy.zeros((1,5))
alpha = numpy.array([1e5,1e3,1e5,1e7,1e3])
dz = 0.001
zeta[0,:] = alpha/(dz*dz)
如果你真的想要遍历指标,你可以这样做:
import numpy
zeta = numpy.zeros((1,5))
alpha = numpy.array([1e5,1e3,1e5,1e7,1e3])
dz = 0.001
for i in xrange(alpha.size):
... zeta[0,i] = alpha[i]/(dz*dz)