2017-10-05 10 views
1

私は偶数行から読み込みたいデータのtxtファイルを持っています。np.loadtxt()txtファイルから1行おきに読み込む方法は? Python

ループを使用せずにpythonでこれを行う方法はありますか?

1 25544U 98067A 98324.28472222 -.00003657 11563-4 00000+0 0 10 
2 25544 51.5908 168.3788 0125362 86.4185 359.7454 16.05064833 05 
1 25544U 98067A 98324.33235038 .11839616 11568-4 57349-2 0 28 
2 25544 51.6173 168.1099.0187 273.4932 16.04971811 11 
1 25544U 98067A 98324.45674522 -.00043259 11566-4 -18040-4 0 32 
2 25544 51.5914 167.4317 0125858 91.3429 269.4598 16.05134416 30 
1 25544U 98067A 98324.51913017 .00713053 11562-4 34316-3 0 48 
2 25544 51.5959 167.1152.8179 273.5890 16.05002967 44 
1 25544U 98067A 98324.51913017 .00713053 11562-4 34316-3 0 59 
2 25544 51.5959 167.1152.8179 273.5890 16.05002967 44 

答えて

1

np.loadtxtを()の行をスキップする能力を持っていない、彼らは最初 N行がある場合を除きます。そうしないと、np.genfromtxt()を使用することになるでしょう:

with open(filename) as f: 
    iter = (line for line in f if is_even_line(line)) 
    data = np.genfromtxt(iter) 

is_even_lineを()指定された行が偶数の場合、ブール値を返す関数です。最初の列は行が奇数または偶数、is_even_line()であるかどうかを示しますので、あなたのケースでは、次のようになります。

def is_even_line(line): 
    return line[0] == '2' 
1

それを行うための1つの方法は、カウンタとモジュロ演算子を使用することです::ここで

は私のデータファイルの最初の10行がある

fname = 'load_even.txt' 

data = []; 
cnt = 1; 
with open(fname, 'r') as infile: 
    for line in infile: 
     if cnt%2 == 0: 
      data.append(line) 
     cnt+=1 

これは、行毎にファイルを読み込みますカウンタ値が偶数の行番号に対応する場合にのみ、カウンタ値を各ラインの後に増加させて、dataにそのラインを追加します。

numpy配列の特定のケースについては、これを使用することができます。

import numpy as np 

fname = 'load_even.txt' 

data = []; 
cnt = 1; 
with open(fname, 'r') as infile: 
    for line in infile: 
     if cnt%2 == 0: 
      data.append(line.split()) 
     cnt+=1 

data = np.asarray(data, dtype = float) 
0

ここで私はそれをやってしまった方法は次のとおりです。

import numpy as np 
import matplotlib.pyplot as plt 


filename = 'zarya2000data.txt' 
a = np.genfromtxt(filename) 

evens = [] 
odds = [] 
N = 8 #30 #5826 #number of lines 


for i in range(N): #2913*2 
    if np.mod(i,2) == 0: 
     evens.append(a[i,:]) 
    else: 
     odds.append(a[i,:]) 

oddsArray = np.asarray(odds) 
evensArray = np.asarray(evens) 

print 'evensArray', evensArray 
print'' 
print 'oddsArray', oddsArray 
print '' 
+0

どのように単純にこのことについて: 'evens = a [0 :: 2]'と 'odds = a [1 :: 2]'は適切なやり方であり、速くなければなりません。 – jadsq

関連する問題