2016-12-19 7 views
3

0と1の値しか持たないテキストファイルが与えられました。 1つの例は次のとおりです。0と1をテキストファイルから2次元配列に変換します。

010 
111 
010 

これらの値を2次元配列に変換する必要があります。したがって、たとえば、私はこのような配列を取得する必要があります

[[0,1,0] , [1,1,1], [0,1,0]] 

を各テキストファイルには、列幅の異なる数を持っているので、私のプログラムは、異なる入力行列のサイズの世話をすることができるはずです。

[ 10. 111. 10.] 

どれ指導は素晴らしいことだ:

しかし
numpy.loadtxt("file1.txt") 

が、これは私の次の出力配列を与える:私は次のことを試してみました!

+0

あなたが望む出力として書いたものは、python * list *です。あなたは、しかし、右、numpy配列をしたいですか? –

答えて

4

numpy.readtextは必要ありません。ただ、組み込みのファイルハンドラを使用します。

import numpy as np 
with open('file1.txt') as f: 
    arr = np.array([list(map(int, line.strip())) for line in f]) 
print(arr) 
+0

ありがとう! –

+0

@robertang - おそらく答えを受け入れるのですか? – aparente001

0

ヨもmap魔法なしでそれを行うことができます。

import numpy as np 

with open('file1.txt') as f: 
    arr = np.array([[int(bin) for bin in line] for line in f]) 
print(arr) 
+0

私は通常、 'map'と' filter'を通じた理解を優先しますが、組み込みの場合、地図は理解よりも速く、もっと重要なことには入れ子の内包よりも読みやすくなります。しかし、その違いはごくわずかです。 –

1

np.genfromtxtを使用すると、固定幅の列を取得できます。 delimiterパラメータには、各列の幅を指定します。私は、最小のフットプリントを使用するためにdtype=np.int8を使用しています。これは、OPは値が0または1であると述べているからです。

import numpy as np 

np.genfromtxt('file1.txt', delimiter=[1, 1, 1], dtype=np.int8) 

array([[0, 1, 0], 
     [1, 1, 1], 
     [0, 1, 0]]) 
+0

'np.int0'は単語サイズの' int'を与えていると思います。 'bool'や' np.int8'を直接使うのがベストです。 –

+0

@ juanpa.arrivillagaありがとう – piRSquared

関連する問題