Python集成,然后保存文本文件

Python集成,然后保存文本文件,python,numpy,Python,Numpy,对所有人: 这个问题与我正在做的一些MS研究有关 我想做的似乎很简单。我有一个值(时间,…值)的文本文件。然后,我希望始终从0积分到这些值,然后将该值保存到文本文件中 from numpy import * from pylab import * import os, sys, shutil import math ####################### #Load Data data = loadtxt('wh.txt') #Open file to save plots to

对所有人:

这个问题与我正在做的一些MS研究有关

我想做的似乎很简单。我有一个值(时间,…值)的文本文件。然后,我希望始终从0积分到这些值,然后将该值保存到文本文件中

from numpy import *
from pylab import *
import os, sys, shutil
import math

#######################

#Load Data
data = loadtxt('wh.txt')

#Open file to save plots to
shutil.rmtree("wh_files")
os.makedirs("wh_files")
os.chdir("wh_files")

for i in range(0,100,1):
   int = trapz(data[i,:],axis=0)
   print int
   savetxt('int.txt', int)
当我运行此命令时,会出现以下错误:

File "integral.py", line 19, in savetxt('int.txt', int) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/numpy/lib/npyio.py", line 960, in savetxt ncol = X.shape[1] IndexError: tuple index out of range 文件“integral.py”,第19行,在 savetxt('int.txt',int) savetxt中的文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site packages/numpy/lib/npyio.py”,第960行 ncol=X.shape[1] 索引器错误:元组索引超出范围
我已经休息了几天试图解决这个问题,但还没有找到解决办法。我感谢您能给予的任何帮助/意见

int的值是一个浮点值,但是
savetxt
需要一个数组。您希望为所有集成结果创建一个numpy数组,然后在最后使用
savetxt
保存它。我认为像这样的事情应该会起作用:

int_array = apply_along_axis(trapz, 0, data)
savetxt('int.txt', int_array)
请记住,这(以及您最初的示例)将对时间字段求和,而不是跨时间进行积分。仅当沿x轴的间距为1时,才会产生有效结果。否则,您将需要执行以下操作:

t = data[0,:]
int_array = apply_along_axis(trapz, 0, data[1:,:], t)
savetxt('int.txt', int_array)
假设时间字段是数字

编辑:下面将进一步解释第二部分代码

您使用梯形规则对各种值进行积分,这是一种积分近似技术,通过将曲线上连续y值的平均值乘以两个y值之间x的变化来计算。这相当于计算连接两个y值和x轴的梯形的面积,如下所示:

你的问题并不完全清楚,但你似乎在整合时间上的值,所以x轴代表时间。需要合并x值以获得每个梯形的正确面积(每个梯形的面积为(x2-x1)*(y2+y1)/2,最终积分结果为所有此类面积的总和)

合并这些x轴值的最简单方法是将其作为
x
参数传递到
trapz
函数中(请参阅)。在上面的示例中,我使用
t=data[0,:]
作为x值的数组

另一个警告:如果x值之间的所有间距都相同(因此x2-x1是一个常数),可以通过将其从总和中取出并在末尾简单地乘以来节省一些计算。此功能可通过带有
dx
参数的
trapz
功能获得。因此,如果您的时间测量是每30秒进行一次,例如,您可以将我的第二个示例中的第二行替换为:

int_array = apply_along_axis(trapz, 0, data[1:,:], None, 30)

希望这能有所帮助。

int=trapz(data[i,:],axis=0)
中,您的意思是使用
data[i:]
而不是
data[i,:]
?另外,使用一个名为标准类型(
int
)的变量可能是个坏主意。非常感谢大家的建议。威尔,你能解释一下你写的最后一段代码吗?我不知道你的意思@威尔:非常感谢你的帮助!我的问题问得不好。事实上,我只是对每次的体积进行积分,而不是对时间进行积分。i、 e.到1.0s,我有一系列代表水面高度的值,然后到1.5s,我有一系列代表新表面配置的新值。我接受这些价值观,然后看看你的变化是如何随时间而变化的。我非常感谢你花时间回答这个问题。