2016-05-23 4 views
0

私は、ファイル内の異なるセットを持っている文字区切りファイルを持っている特定の文字列の発生時に新しい配列を作成するには? numpyの

ファイル

@Set 1 
0,1,2,3 
2,3,4,5 
. 
. 
@Set 2 
3,4,5,6 
4,5,6,7 
. 
. 

私は、各セットからのデータを配列にしたいと私はまた、そこからデータがある設定が必要になります撮影。私はdata['@Set 1']を見ることができます

with open('File', 'r') as f: 
    data = {} 
    numbers = [] 
    for line in f: 
     ln = line.strip() 
     if '@Set' in ln: 
      data[ln] = numbers 
      numbers = [] 
     elif ln: 
      numbers.append([float(n) for n in ln.split(',')]) 

を使用していますが、私は特定の列を使用することはできませんよ、と私は私が列にアクセスすることができます配列が必要になりますので、numpy.genfromtxtを使用します。

答えて

0

np.genfromtxtをこのファイルの形式で使用することはできません。あなたが望むように、あなたが特定の列を使用することができます

import numpy as np 
numbers_array = np.asarray(numbers) 

:リストnumbersを持っていたら、とnp.arrayに変換することができます。

+0

はええ、私は私のスニペットを変更し、同じことを行うためにそれを使用するが、私は辞書に最初の最後のセットを取得しています問題があります。 – SamD97

+0

np.asarrayは、使用できる2Dリストの1Dリストでのみ動作します。np.array(data ['@ Set 1']) – SamD97

1
with open('File', 'r') as f: 
    data = {} 
    numbers = [] 
    for line in f: 
     ln = line.strip() 
     if '@Set' in ln: 
      data[ln] = numbers 
      numbers = [] 
     elif ln: 
      numbers.append([float(n) for n in ln.split(',')]) 

numbersは、浮動小数点のリストです。それぞれをnp.arrayに渡すと、2d配列に変換されるはずです。

for k,v in data.items(): 
    data[k] = np.array(v) 

はそれライン

フィード任意の入力で動作します genfromtxtテイク利点を使用するには
with open('File', 'r') as f: 
    data = {} 
    numbers = [] 
    for line in f: 
     ln = line.strip() 
     if '@Set' in ln: 
      data[ln] = numbers 
      numbers = [] 
     elif ln: 
      numbers.append(ln) 

for k, v in data.items() 
    data[k] = np.genfromtxt(v, ...) 

ありますがgenfromtxtにラインのセットを供給することができ、他の方法がありますが、これは最も簡単なものIました目障りなエラーやテストの必要なしに書き込むことができます。 Python3では、ファイルモードをrbにする必要があります。

私はしばしばのようなコードを使用してテストの答え:

txt = b"""1.23,2,3 
4.34,5,6 
""".splitlines() 
data = np.genfromtxt(txt,delimiter=',',dtype=None) 
+0

ありがとう、私はnumpy配列に変換できればgenfromtxtは必要ありません。どうもありがとうございます – SamD97

関連する問題