我正在尝试使用
读取我之前在python中创建的csv文件with open(csvname, 'w') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=',')
csvwriter.writerows(data)
数据是一个包含大约30k * 30k条目的随机矩阵,np.float32格式。总共大约10 GB的文件大小。
一旦我使用这个函数读入文件(因为我已经知道我的矩阵的大小,而且np.genfromtxt的速度非常慢,此时需要大约100 GB的RAM)
def read_large_txt(path, delimiter=',', dtype=np.float32, nrows = 0):
t1 = time.time()
with open(path, 'r') as f:
out = np.empty((nrows, nrows), dtype=dtype)
for (ii, line) in enumerate(f):
if ii%2 == 0:
out[int(ii/2)] = line.split(delimiter)
print('Reading %s took %.3f s' %(path, time.time() - t1))
return out
我需要大约10分钟来阅读该文件。我使用的硬盘驱动器应该能够读取大约100 MB / s的速度,这会将读取时间缩短到大约1-2分钟。
任何想法我可能做错了什么?
相关:why numpy narray read from file consumes so much memory? 这就是函数read_large_txt来自。
答案 0 :(得分:0)
我找到了一个非常简单的解决方案。由于我也在创建文件,因此我不需要将它们保存为.csv文件。将它们加载为.npy文件的方式(!)更快:
加载(包括将每行分成',')存储为.csv的30k * 30k矩阵大约需要10分钟。使用存储为.npy的矩阵执行相同操作大约需要10秒钟!
这就是我必须将上面编写的代码更改为:
的原因np.save(npyname, data)
并在另一个脚本中
out = np.load(npyname + '.npy')
此方法的另一个优点是:(在我的情况下).npy文件只有.csv文件大小的40%。 :)