我有一个大小为 1505MB 的文本文件包含浮点数据。该文件有大约73000行和1500列。我想将文件的内容读入numpy
数组,然后对数组执行一些分析,但我的机器使用numpy.readtxt
读取文件的速度变慢了。使用python将这个文件读入数组的最快方法是什么?
答案 0 :(得分:4)
您还可以使用经过优化的pandas阅读器:
In [3]: savetxt('data.txt',rand(10000,100))
In [4]: %time u=loadtxt('data.txt')
Wall time: 7.21 s
In [5]: %time u= read_large_txt('data.txt',' ')
Wall time: 3.45 s
In [6]: %time u=pd.read_csv('data.txt',' ',header=None).values
Wall time: 1.41 s
答案 1 :(得分:2)
以下函数分配读取文本文件所需的适当内存量。
def read_large_txt(path, delimiter=None, dtype=None):
with open(path) as f:
nrows = sum(1 for line in f)
f.seek(0)
ncols = len(f.next().split(delimiter))
out = np.empty((nrows, ncols), dtype=dtype)
f.seek(0)
for i, line in enumerate(f):
out[i] = line.split(delimiter)
return out
它通过事先知道行数,列数和数据类型来分配内存。您可以轻松添加np.loadtxt
或np.genfromtxt
中的一些额外参数,例如skiprows
,usecols
等。
正如@Evert观察到的那样,out[i] = line.split(delimiter)
似乎是错误的,但是NumPy将字符串转换为dtype
,而不需要在此处额外处理数据类型。 There are some limits though