Python-Integrate然后保存文本文件

时间:2011-10-28 14:35:06

标签: 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
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

我一直试图解决这个问题几天,但我还没有找到解决方案。我感谢您提供的任何帮助/意见。

1 个答案:

答案 0 :(得分:2)

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轴的梯形的面积,如下所示:

Trapezoid Rule

从您的问题中并不完全清楚,但似乎您正在整合这些值,因此x轴代表时间。需要合并x值以获得每个梯形的正确面积(每个梯形的面积为(x 2 - x 1 )*(y 2 + y 1 )/ 2,最终积分结果是所有这些区域的总和)。

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

另一个警告:如果x值之间的所有间距相同(因此x 2 - x 1 是常量),您可以通过拉动来节省一些计算这个总和,只是在最后乘以它。通过trapz函数和dx参数可以使用此功能。因此,例如,如果您每30秒进行一次测量,则可以将第二个示例中的第二行替换为:

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

希望有所帮助。