我发布这个问题是因为我想知道我是否做了一些非常错误的事情来得到这个结果。
我有一个中等大小的csv文件,我试图使用numpy来加载它。为了演示,我使用python制作了文件:
import timeit
import numpy as np
my_data = np.random.rand(1500000, 3)*10
np.savetxt('./test.csv', my_data, delimiter=',', fmt='%.2f')
然后,我尝试了两种方法:numpy.genfromtxt,numpy.loadtxt
setup_stmt = 'import numpy as np'
stmt1 = """\
my_data = np.genfromtxt('./test.csv', delimiter=',')
"""
stmt2 = """\
my_data = np.loadtxt('./test.csv', delimiter=',')
"""
t1 = timeit.timeit(stmt=stmt1, setup=setup_stmt, number=3)
t2 = timeit.timeit(stmt=stmt2, setup=setup_stmt, number=3)
结果表明:t1=32.159652940464184,t2=52.00093725634724
但是,当我尝试使用matlab时:
tic
for i = 1:3
my_data = dlmread('./test.csv');
end
toc
结果表明:经过时间3.196465秒。
我知道装载速度可能有一些差异,但是:
如有任何意见,将不胜感激。提前多谢!
或许,最好装配一个简单的c代码,将数据转换成二进制文件,并让“numpy”读取二进制文件。我有一个20gbcsv文件要读取,CSV数据是int,double,str的混合体。Numpy读取到结构数组需要一个多小时,而转储到binary需要大约2分钟,加载到Numpy需要不到2秒!
例如,我的特定代码是可用的here。
如果您只想保存并读取numpy数组,那么最好根据大小将其保存为二进制或压缩二进制:
是的,将
csv
文件读入numpy
非常慢。在代码路径上有很多纯Python。现在,即使我使用纯的numpy
,我仍然使用pandas
作为IO:或者,在这个简单的例子中,您可以使用Joe Kington写的here:
还有Warren Weckesser的textreader库,以防
pandas
过于依赖:相关问题 更多 >
编程相关推荐