2017-02-24 96 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