我有用于机器学习目的的大型 svmlight 文件。我正在尝试查看对这些文件进行总采样是否会产生足够好的结果。
我想提取文件的随机行以将它们输入到我的模型中,但我想在 RAM 中加载尽可能少的信息。
我在这里 ( Read a number of random lines from a file in Python ) 看到我可以使用 linecache 但所有解决方案最终都会将所有内容加载到内存中。
有人可以给我一些提示吗?谢谢。
编辑:忘了说我事先知道文件中的行数。
请您参考如下方法:
您可以使用heapq 根据随机数选择n 条记录,例如:
import heapq
import random
SIZE = 10
with open('yourfile') as fin:
sample = heapq.nlargest(SIZE, fin, key=lambda L: random.random())
这是非常有效的,因为 heapq 保持固定大小,它不需要对数据进行预扫描,并且元素会在选择其他元素时被换出 - 所以最多你会得到 一次在内存中 SIZE 个元素。
