【发布时间】:2016-03-21 14:45:39
【问题描述】:
我有一个名为“cmp_twtt_amp_rho”的输入文件,它有 7795074 行长。 我想计算每条线的声速 c,其中:
c(i) = rho(i-1) * c(i-1) * (-1-amp(i)) / rho(i) * (amp(i)-1)
使用 c=1450 的初始猜测。
我编写了一个我相信会起作用的 for 循环,但是它会随着时间的推移而变得越来越慢,以至于无法想象以当前格式运行。
有人可以帮我加快这段代码的速度吗?
data=np.genfromtxt('./cmp_twtt_amp_rho')
cmp_no=data[:,[0]]
twtt=data[:,[1]]
amp=data[:,[2]]
rho=data[:,[3]]
cs=[]
for i in range(1,len(amp-1)):
if i == 1:
print "Using an initial guess of 1450 m/s"
c = (rho[i-1]*1450*(-1-amp[i]))/(rho[i]*(1-amp[i]))
cs = np.append(c,cs)
elif twtt[i] == 0:
print "Reached new cmp #: ",cmp_no[i],"as twwt has re-started at ",twtt[i]
c = 1450
cs = np.append(c,cs)
else:
print i
c = (rho[i-1]*cs[i-1]*(-1-amp[i]))/(rho[i]*(1-amp[i]))
cs = np.append(c,cs)
print min(cs), max(cs)
print len(cs)
【问题讨论】:
-
如果你只做
cs.append(c)而不是cs = np.append(c, cs)会发生什么? -
您有一个符号错误。您帖子中的公式与代码不匹配;公式为
(amp(i) - 1),代码为(1 - amp[i])。 -
抱歉,代码中的一个类型,公式是正确的。
标签: python performance for-loop append