Python-整合后保存文本文件
大家好:
这个问题和我正在做的一些微软研究有关。
我想做的事情看起来很简单。我有一个文本文件,里面有一些数值(时间,……其他数值)。然后我想对这些数值从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 个回答
这里提到的 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 轴值纳入计算的最简单方法是将它传递给 trapz
函数作为 x
参数(可以查看 文档)。在上面的例子中,我使用 t = data[0,:]
作为 x 值的数组。
还有一个注意事项:如果所有 x 值之间的间隔都是相同的(这样 x2 - x1 是一个常数),你可以通过将这个常数提取出来,省去一些计算,最后直接相乘。这种功能可以通过 trapz
函数的 dx
参数来实现。所以,如果你的时间测量是每 30 秒进行一次,比如说,你可以将我第二个例子中的第二行替换为:
int_array = apply_along_axis(trapz, 0, data[1:,:], None, 30)
希望这能帮到你。