1

我目前正在使用 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 比较陌生。我将非常感谢任何关于我哪里出错的反馈/指示。

4

1 回答 1

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。

于 2013-10-18T19:46:40.260 回答