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