提高python数值计算速度
以下是自己写的一个python脚本,用来进行高斯展开的,可发现运行速度特别慢,短板应该是数值计算,请问有没有什么方式可以加快它的运行速度?另外,我一直是自学的,代码肯定有...
以下是自己写的一个python脚本,用来进行高斯展开的,可发现运行速度特别慢,短板应该是数值计算,请问有没有什么方式可以加快它的运行速度?另外,我一直是自学的,代码肯定有许多不足之处,还望指点...
#!/usr/bin/python3.4
import numpy as np
import sys
def gaussian(start=0, end=10, step=0.5, parameter=('sigma', 0.1), inp=[]):
if parameter[0]=='sigma':
sigma=parameter[1]
elif parameter[0]=='FWHM':
sigma=parameter[1]/(2*np.sqrt(2*np.log(2)))
else:
sigma=1
print('sigma is set to 1')
i=start
outp=[]
while i<=end:
height=0
for j in inp:
try:
height+=j[1]*np.exp(-(j[0]-i)**2/(2*sigma**2))/(sigma*np.sqrt(2*np.pi))
except IndexError:
height+=np.exp(-(j[0]-i)**2/(2*sigma**2))/(sigma*np.sqrt(2*np.pi))
outp.append((i, height))
i+=step
return outp
f=open(sys.argv[1], 'r')
lines=f.readlines()
f.close()
inp=[]
for i in range(len(lines)):
hang=[]
for j in lines[i].split():
hang.append(float(j))
inp.append(hang)
outp=gaussian(float(sys.argv[2]), float(sys.argv[3]), float(sys.argv[4]), (sys.argv[5], float(sys.argv[6])), inp)
text=''
for i in range(len(outp)):
text+='%15.9f%15.9f\n' % (outp[i][0], outp[i][1])
w=open('gaussian.dat', 'w')
w.write(text)
w.close() 展开
#!/usr/bin/python3.4
import numpy as np
import sys
def gaussian(start=0, end=10, step=0.5, parameter=('sigma', 0.1), inp=[]):
if parameter[0]=='sigma':
sigma=parameter[1]
elif parameter[0]=='FWHM':
sigma=parameter[1]/(2*np.sqrt(2*np.log(2)))
else:
sigma=1
print('sigma is set to 1')
i=start
outp=[]
while i<=end:
height=0
for j in inp:
try:
height+=j[1]*np.exp(-(j[0]-i)**2/(2*sigma**2))/(sigma*np.sqrt(2*np.pi))
except IndexError:
height+=np.exp(-(j[0]-i)**2/(2*sigma**2))/(sigma*np.sqrt(2*np.pi))
outp.append((i, height))
i+=step
return outp
f=open(sys.argv[1], 'r')
lines=f.readlines()
f.close()
inp=[]
for i in range(len(lines)):
hang=[]
for j in lines[i].split():
hang.append(float(j))
inp.append(hang)
outp=gaussian(float(sys.argv[2]), float(sys.argv[3]), float(sys.argv[4]), (sys.argv[5], float(sys.argv[6])), inp)
text=''
for i in range(len(outp)):
text+='%15.9f%15.9f\n' % (outp[i][0], outp[i][1])
w=open('gaussian.dat', 'w')
w.write(text)
w.close() 展开
展开全部
把那些不含自变量的表达式,都提前算出来,log(2) 什么的,避免重复运算。
另外依据你的精度要求适当放宽精度,我记得好像有环境变量可以控制,也许能提高速度,不保证
另外依据你的精度要求适当放宽精度,我记得好像有环境变量可以控制,也许能提高速度,不保证
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询