2017-02-24 55 views
0

我正在嘗試加載大型數組作爲我正在從.dat工作的小型項目的一部分。使用Numpy加載大數據文件?

我通常使用numpy.loadtxt從我的文件中讀取數據,以形成單柱陣列,其中,如果我的文件是:

1 2 3 
1 2 3 
1 2 3 

我在哪裏使用:

x, y, z = np.loadtxt("123.dat", Unpack =True) 

要分配3列到數組1,2和3.我正在使用的文件具有以下格式。

0000000000 4.975124E-03 -3.046211E+00 -1.148806E+00 
0000000001 2.543665E-06 -3.661235E+00 -1.038111E+00 
0000000002 2.543665E-06 -1.285855E+01 1.251881E+00 

這種格式在我的文件中重複大約52k行。 但是,當我嘗試使用相同的方法,並嘗試使用以下內容。

i, m, x, y = np.loadtxt("stars.dat", unpack=True) 

我收到以下錯誤消息。

Traceback (most recent call last): 
    File "test.py", line 4, in <module> 
    i, m, x, y = np.loadtxt("stars.dat") 
ValueError: too many values to unpack (expected 4) 

我試圖改變參數usecols =(1,2,...),然而,這並不正確收集值到矩陣,它選擇從我的文件,該文件是不對齊的隨機值在列中。

我該如何着手解決這個錯誤,以及在使用Numpy從文件中導入大量數據並將它們分配給數組時,有哪些正確的方法?

回答

0

您的樣本應按預期方式解壓縮爲4個變量。該文件必須有不同的內容。該錯誤表明它發現超過4列。 usecols的問題進一步表明您的文件中列的概念與loadtxt看到的不同。這可能是分隔符的問題。

與樣品:

In [114]: txt=b"""0000000000 4.975124E-03 -3.046211E+00 -1.148806E+00 
    ...: 0000000001 2.543665E-06 -3.661235E+00 -1.038111E+00 
    ...: 0000000002 2.543665E-06 -1.285855E+01 1.251881E+00""" 

In [119]: data=np.loadtxt(txt.splitlines()) 
In [120]: data.shape 
Out[120]: (3, 4) 
In [121]: data.dtype 
Out[121]: dtype('float64') 

平原負載發現3行,4列。這樣做一個簡單的負載是一個好主意,以確保您正確讀取文件。

unpack只是調換陣列:

In [122]: data=np.loadtxt(txt.splitlines(), unpack=True) 
In [123]: data.shape 
Out[123]: (4, 3) 
In [124]: i,j,k,l=data 

然後可以事後解壓縮。解包是對變量元組的正常Python分配。除了轉置loadtxt沒有做任何特別的unpack