2016-12-19 31 views
3

我給出了一個僅包含0和1值的文本文件。一個例子是:將文本文件中的0和1轉換爲二維數組

010 
111 
010 

我需要把這些值,把它們變成一個二維數組。因此,對於本例中,我應該得到的數組是這樣的:

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

每個文本文件都有不同數量的列和寬度的,所以我的計劃應該能夠採取不同的輸入矩陣大小的照顧。我曾嘗試以下:

numpy.loadtxt("file1.txt") 

然而,這給了我下面的輸出數組:

[ 10. 111. 10.] 

任何指導意見將是巨大的!

+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表示的值只會是零或一。

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

相關問題