2013-10-18 60 views
1

我目前使用Python後處理來自我編寫的C++程序的一些結果。數據存儲在csv文件中。這裏是數據文件的格式:使用Python導入數據文件和後期處理

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

「我」的價值和它在哪裏設置? – crayzeewulf

回答

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。

相關問題