2017-02-04 7 views
0

ベクトルのリスト(#lines = 1137)(すべて同じサイズ= 1137)を含むテキストファイルを1137に変換しようとしています* 1137マトリックス。私はnumpyを使って空の行列を作成しました。しかし、私は次のコードを使用してファイルを読み込むときに、後の問題は、ベクトルがない私は認識テキストファイルからのn * n行列の作成には、Pythonのリストのリストが含まれています

myMtrx = np.empty((1137,1137)) 
f = open("text.txt", "r") 
for vector in f: 
    print len(vector) 
    arrayF.append(vector.rstrip()) 

ベクトルまたは配列として、一連の文字として扱われ、各ベクトルの私達の長さを、印刷することによってどのそのベクトルの要素ではない桁数に基づいて計算されます。テキストファイル内のベクトルは、私がprint arrayF[0][0]を印刷するときに、私は、私は99.25である第一のベクターの第一要素である出力を必要とする[を、受信

[99.25, 14.74, 26.12, 20.91, 37.14, 79.03, 17.68, 28.4, ...., 0] 

のように見えます。

私はnumpyを使っていくつかの方法を試してみましたが、テキストファイルをCSVに書きましたが、何も動作しません。この問題を解決するために私を助けてください。テキストファイルにアクセスするには、次のリンクをクリックしてください。 text.txt

+2

'for vector in f'と言うと、' vector'変数の中であなたのコードに渡されるものはベクトルではなく、ファイルの1行全体(文字列として)です。'for line in f'のようなことを行い、ループの中にコードを書いて、各行を(正規表現や' str.split() 'を使って)目的のトークンに分割したいとします。その後、それらのトークンを使用して配列を埋める前に、それらのトークンを数値に変換してください。 – dhrumeel

+0

迅速な対応に感謝します。ベクトルの内容は、私の投稿[99.25、........ 0]で説明されていますが、あなたが言ったように、配列としてではなく文字列として解析されます。しかし、reg式より簡単な方法はありますか? – Mohannad

+0

行がサンプルに付いている場合は、行からsqare括弧を取り除き、コンマスペースで分割し、rhe splitから出てくるすべてのリスト要素をint()にすることができます。意味がありますか? – Dilettant

答えて

0

文字列から始めて、あなたはそれから数のリストを取得するには、次の手順を実行する必要があります。

  1. 使用strip[]
  2. 使用split(",")を取り除くために、すべてカンマで文字列を分割し、山車
  3. 使用リストのリストに変換する文字列
  4. 使用マップ(フロート、ベクトル)のリストを作成します()を使ってマップされたオブジェクトではなく実際のリストを取得する

これをあなたのnumpy行列に入れることができます。 numpyを使用している場合は、numpyは自動的に浮動小数点数を推論するため、map(float, vector)を使用する必要はありません。ここで

はサンプルコードです:

myMtrx = np.empty((1137,1137)) 
f = open("text.txt", "r") 

for idx, vector in enumerate(f): 
    # vector = '[99.25, 14.74, 26.12, 20.91, 37.14, 79.03, 17.68, 28.4, 0]' 
    vector = list(map(float, vector.strip("[]\n").split(","))) 
    myMtrx[idx ,:] = vector 
+0

提案されたコードを実装しましたが、次のエラーを受け取りました。 'ValueError:float()の無効なリテラル:17.6] ' – Mohannad

+0

ファイルの最初の行は17.6で終わりますか?それが問題の原因となっている可能性のある改行文字である可能性があります。ストリップ()内に\ nを追加してみてください – bluprince13

+0

ありがとうございます、今すぐ働きます:) – Mohannad

1

ファイルから文字列を読み込み、リストに変換する必要があります。このような解決策は、トリックを行うことができる。

for line in f: 
    vector = line.strip("[]").split(",") 
    ... 
  • strip:初めと列
  • splitの端部から「[]」内のすべての文字を削除します「それぞれで切断、リストに文字列を変換し、 「位置
0

私はこれを行うだろう:

f = open('first.txt').readlines() 
    f = [i.strip('\n') for i in f] 

    new_list = [] 
    final_list = [] 
    for i in f: 
     new_list.append(i.split(' ')) 

    for i in new_list: 
     final_list.append(map(int, i)) 

    print final_list 

我々は、Fに内容を読んで、スペースでそれらを分割し、new_listするためにそれらを追加して、マップ形成された行列の各文字列に対して、それをfinal_listに追加します。これにより、あなたが望む行列が得られます。

関連する問題