2014-10-03 131 views
0

我正在寫一個Python腳本,它逐行讀取輸入文件,每行包含20個值。我試圖在第一個數組中存儲第一個數據,並在第二個數組中存儲另外19個數據。Python將值行分成兩個數組

他們被定義爲:

x = numpy.zeros((n_lines)) 
y = numpy.zeros((n_lines,19)) 

n_lines在我輸入文件中的行數。 和我與

for i,line in enumerate(open(infile)): 
    x[i],y[i] = line.split(' ') 

閱讀它但我通過在一個單一的大陣列中存儲它,然後將其切割成兩個末端遇到Too many values to unpack error

我現在做它。我沒有使用line.split(' ')[0],line.split(' ')[1:],因爲它看起來沒有優化分裂兩次。

是否有一種整潔的(Pythonista)解包方式?

(我使用Python 2.7,如果該事項)

回答

2

你做的最後部分權(創建一個數組,然後切片),但第一部分應使用numpy.genfromtxt()來完成,像這樣:

big_array = numpy.genfromtxt(infile) ## probably with more arguments 
x, y = numpy.split(big_array, [1]) 

如果需要更有效的解決方案,替代的是:

big_array = numpy.empty((nlines, 20)) 

for i,line in enumerate(open(infile)): 
    big_array[i,:] = line.split() 

x, y = numpy.split(big_array, [1]) 

最後,直接從線拆包到前者xy陣列可以做到這樣的:

splitted = line.split(); 
x[i], y[i,:] = splitted[0], splitted[1:] 
+0

這絕對是更快的代碼,但在這裏解釋說:http://stackoverflow.com/questions/24701696/python-and-memory-efficient-way-of-導入-2d數據對於大規模數據導入而言效率低下。 – 2014-10-03 13:59:45

+1

然後你可以創建整個大數組,然後使用'numpy.split()'作爲它的顯示。這能解決問題嗎? – heltonbiker 2014-10-03 14:03:17

+0

我的問題可能不夠清楚,我相信你的分裂解決方案可能會比我現在使用的解決方案更好。我很想知道從20到1 + 19解包的正確方法,而不是如何讀取文件或拆分數組。順便謝謝你的意見! – 2014-10-03 14:17:43