2017-08-27 7 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'の後にコロンを追加し、次の行を4つの空白でインデントします。 –

答えて

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

それは良いアイデアですが、私にエラーを与えます: 'column = matrix [、、0] IndexError:配列のインデックスが多すぎます –

+0

これは非常に大きなファイル用で、これは問題になりますか? –

+0

@AlessandroPeca:あなたはあなたの質問で、あなたが列を選択する部分が働いていると言った。私は基本的にその部分をコピーしました。そして今、あなたはそれが動作しないと言う。私はあなたの入力データが適切でないか、実際にはまだ何もしていないと思いますか?入力データの小さなサンプルを投稿することがあります。 –

関連する問題