使用Python导入数据文件和后处理

时间:2013-10-18 17:35:19

标签: python

我目前正在使用Python来处理我编写的C ++程序的一些结果。数据存储在csv文件中。以下是数据文件的格式:

0.1111111111
0,0,0
0.1111111111,-0.04001496601,-0.02504003688
0.2222222222,-0.0793835043,-0.04974652802
0.3333333333,-0.1171623362,-0.07381573872
0.4444444444,-0.1521229773,-0.09695208717

我有4个这样的数据文件。对于每个文件,我需要读取第一行,将其存储到变量,然后读取存储它们的其余行到数组。我是这样做的(建议欢迎):

nGridPts = [10,100,1000,2000]

# Setting up lists for dx vector and L2 vector
dx = [0]*len(nGridPts)
L2 = [0]*len(nGridPts)

for nPts in nGridPts:

    # Importing data 
    fname = './DataFiles/Hw2_'+str(nPts)+'pts.dat'
    dx[i-1] = np.genfromtxt(fname,skip_footer=(nPts),usecols=0,dtype=float)
    data = np.genfromtxt(fname,delimiter=',',dtype=float,skip_header=1)

    # Separating data
    x_n = data[:,0]
    phi_n = data[:,1]
    TE = data[:,2]

然后,我需要计算截断误差(TE)的L ^ 2范数。这是在上述循环中完成的,如下所示:

    sum = 0.0
    for n in TE:
        sum = sum + TE[n]**2*dx[i-1]
    L2[i-1] = math.sqrt(sum)

然而,我得到的只是sum = 0.0和L2 = 0.0。我已经打印出TE [n]和dx [i-1]的类型。结果是

TE[0] type = 
<type 'numpy.float64'>
dx[0] type = 
<type 'numpy.ndarray'>

这可能是一个简单的问题,但我似乎无法弄明白。我对Python比较陌生。我非常感谢任何有关我出错的反馈/指示。

1 个答案:

答案 0 :(得分:0)

L ^ 2计算中有错误。它应该是:

sum = 0.0
for n in TE:
    sum = sum + n**2 * dx[i-1]

语句for n in TE迭代TE中的值而不是索引。由于TE中的所有值都小于1.0,因此旧代码继续使用TE[0],即0.0。