在用python做机器学习的时候,有时候训练或测试数据特别大,一个文件就有几个G,如何高效读取,不使机器内存爆炸呢,以我自己的工作经历来说,读取一个特别大的二进制文件来做测试,有几个G的大小,但每次只测batch size =100个样本。这样可以使用迭代器:

import numpy as np
#我们读的是保存浮点数的二进制文件 test_data.dat ,由连续的1+500=label+data的据组成
def data_read(file_path):
	with open(file_path,'rb') as f:
		wile True:
			data_labels = f.read(100*4*(1+500)) #每次100个数据,每个数据有501个数,每个数有4个字节
			if data_labels:
				#做数据预处理
				data_labels = np.frombuffer(data_labels,dtype=np.float32)
				#用生成器返回
				yield data_labels
				return #如果读到文件末尾,则退出
#以下定义测试函数
def test(data_labels):
	data_labels = np.reshape(data_labels,(-1,501))
	datas = data_labels[:,1:]
	labels = data_labels[:,0]
	preds = model(datas)
	   ......
#可以进行测试使用
for data_labels in data_read(file_path):
	.....
	output=test(data_labels)

以上就是使用流程,可以根据自己业务需求进行修秘诀

在用python做机器学习的时候,有时候训练或测试数据特别大,一个文件就有几个G,如何高效读取,不使机器内存爆炸呢,以我自己的工作经历来说,读取一个特别大的二进制文件来做测试,有几个G的大小,但每次只测batch size =100个样本。这样可以使用迭代器:import numpy as np#我们读的是保存浮点数的二进制文件 test_data.dat ,由连续的1+500=label+d...
最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法。 我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容入可以操作的字符串变量非常容易。文件对象提供了三个“”方法...
今天有个朋友问了我一个问题,如何使用Python读取文件?觉得这个问题挺有意思的,就记录下来。 大部分时间我们处理小文件的时候(1g以内?),可以直接用f.read()或readlines()直接把全部内容读取到内存里面来。但当文件非常大,比如10g,100g的时候,文件的大小一般已经超出了机器的内存大小,就没法直接按小文件的方式处理了。那应该怎么办呢? 首先,选一个文件做演示,就用上一篇博客的...
python大数据文件读取 python中经常会遇到读取文件的场景。文件较小时,我通常采用下面方法,readlines(),该方法会一次性读取文件的所有行,并将其放入list中,最后存入内存中。可想而知,当文件较大是,内存占用会非常高,甚至造成内存溢出,进程被系统kill掉。 # 读取方式一 with open(file_path, 'r+', encoding='utf-8') as f: count = 0 for line in f.readlines(): 细节1:python3.x版本判断读取文件尾需要用if not a: 不能用if a == "": 细节2:fopen.read(4) 一次4个字节,使用struct.unpack('<I',a)[0]转换成unsigned int类型的值 1.1 struct.pack(fmt,v1,v2,.....) 将v1,v2等参数的值进行一层包装,包装的方法由fmt指定。被包装的参数必须严格符合fmt。最后返回一个包装后的字符串。 1.2 s...