我正在尝试加载一个大型数组,作为我正在从.dat工作的一个小项目的一部分。
我通常使用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 :(得分: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
做任何特别的事情。