2017-08-27 60 views
0

我正在嘗試編寫一個程序,它只打開行和列中的數字的文本文件,以將它們保存在新文件中。 我選擇列的部分起作用,而部分行不起作用。 我必須選擇條件爲x> 10e13的行(其中x是特定列中的值)。 這是我寫的代碼:如何選擇具有條件的行並將它們保存在文件中

import numpy as np 

matrix = np.loadtxt('file.dat') 

#select columns: 
column_indecies = [0] 
selected_columns = matrix[:,column_indecies] 

x=10E13 

#select lines: 
for line in matrix: 
    if float(line) > x: 
     selected_lines = line 

selected_matrix = matrix[selected_lines,selected_columns] 

# output: 
np.savetxt('new_file.dat', selected_matrix, fmt='%1.4f') 

而且這是在終端輸出誤差:

selected_matrix = matrix[selected_lines] 
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices 

我是初學者,誰能幫助我?我是Mac用戶,我正在使用Python 2.7。 這是我的輸入數據的小樣本:

185100000000000.0000 
121300000000000.0000 
257800000000000.0000 
43980000000000.0000 
+2

'如果浮子(線)> X:'這是該錯誤的原因,還添加了標籤空間'selected_lines [] =線[]'線 –

+0

我知道,但我該如何解決它? @NarenMurali –

+1

@AlessandroPeca在'x'後面加上一個冒號,並將下一行縮進四個空格 –

回答

1

不要使用for循環。代替:

column = matrix[:,0] 

x = 10E13 

selected = column > x # this is a bool array 

selected_matrix = column[selected] 

價:https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html

+0

這是一個好主意,但給我的錯誤:'列=矩陣[:,0] IndexError:太多索引數組' –

+0

這是非常大的文件,我被建議使用顛簸,這可能是問題嗎? –

+0

@AlessandroPeca:您在您的問題中表示您選擇列的部分有效。而且我基本上覆制了這部分。現在你說它不起作用。我猜你的輸入數據不適合,或者你實際上沒有任何工作?也許發佈您的輸入數據的一個小樣本。 –

相關問題