【发布时间】:2012-11-04 07:02:53
【问题描述】:
我对 python 和一般编程很陌生,但我正在尝试对包含大约 700 万行 python 的制表符分隔的 .txt 文件运行“滑动窗口”计算。我所说的滑动窗口的意思是它将运行一个计算,比如说 50,000 行,报告数字,然后向上移动说 10,000 行,并在另外 50,000 行上执行相同的计算。我的计算和“滑动窗口”工作正常,如果我在一小部分数据上测试它,它运行良好。但是,如果我尝试在我的整个数据集上运行该程序,它会非常慢(我现在已经运行了大约 40 个小时)。数学很简单,所以我认为它不应该花这么长时间。
我现在阅读 .txt 文件的方式是使用 csv.DictReader 模块。我的代码如下:
file1='/Users/Shared/SmallSetbee.txt'
newfile=open(file1, 'rb')
reader=csv.DictReader((line.replace('\0','') for line in newfile), delimiter="\t")
我相信这是一次从所有 700 万行中制作一本字典,我认为这可能是它对于较大文件的速度如此之慢的原因。
由于我只对一次对“块”或“窗口”数据运行计算感兴趣,有没有一种更有效的方法来一次只读取指定的行,执行计算,然后重复指定行的新指定“块”或“窗口”?
【问题讨论】:
-
这不会一次创建所有行的字典。它为每一行制作一个字典。这意味着您发布的 sn-p 不是您性能问题的原因。也许您可以向我们展示更多代码?
-
我怀疑如果您正在对大量类似表格的数据进行计算,您可能希望查看 Pandas:pandas.pydata.org/pandas-docs/dev/… 您尝试做的所有事情都可能在 1000 年之前已经完成好几倍。
-
您将在 696 个“窗口”上运行此计算。 50k 行文件的单个窗口需要多长时间?
-
分析您的代码并准确了解它大部分时间都花在了哪里。
标签: python tabs sliding-window delimited