【发布时间】:2011-01-16 23:30:51
【问题描述】:
这很奇怪
我正在使用 Python 中的 numpy 库读取一些(当然非常大:每个约 2GB)二进制文件。 我正在使用:
thingy = np.fromfile(fileObject, np.int16, 1)
方法。 这正好在一个嵌套循环的中间——我每个“通道”循环 4096 次,这个“通道”循环每个“接收器”循环 9 次,这个“接收器”循环 4 次(有 9 个通道每个接收器,其中有 4 个!)。这是针对每个“块”的,其中每个文件大约有 3600 个。
所以你可以看到,非常迭代,我知道这需要很长时间,但它比我预期的要长很多 - 每个“块”平均需要 8.5 秒。
我使用 time.clock() 等运行了一些基准测试,发现一切都以应有的速度进行,除了每个“块”大约 1 或 2 个样本(因此 4096*9*4 中的 1 或 2 个样本),其中它似乎会“卡住”几秒钟。现在这应该是从二进制返回一个简单的 int16 的情况,而不是应该花几秒钟的时间......为什么它会粘住?
从基准测试中我发现它每次都停留在相同的位置(第 2 块,接收器 8,通道 3,样本 1085 就是其中之一,记录在案!),它会卡在那里大约每次运行的时间相同。
有什么想法吗?!
谢谢,
邓肯
【问题讨论】:
-
我猜是从0开始计数的吧?
-
是的,所以接收器 0-3,通道 0-7,样本 0-4095
-
fromfile()之类的问题在于它无法提前知道要分配多少空间,因此对于非常大的文件,您可能会被搞砸。请参阅我的回答和stackoverflow.com/questions/1896674/… 中的以下一些 cmets,了解有关如何处理此问题的可能想法以及潜在问题。 -
Peter - 谢谢你,问题是我不想同时存储所有内容。我只是在读取可管理的数据块(最大约 2mb),用它们计算东西,将结果写入文件然后重复。似乎我完成的那个没有被处理/垃圾收集。明天回去工作时,我会尝试其中一些解决方案。
-
我完成的那些没有被处理掉——完成后试试
del xx?可能会更快,可能不会
标签: python binary numpy binaryfiles