【问题标题】:writing large netCDF4 file with python?用python编写大型netCDF4文件?
【发布时间】:2012-08-01 17:25:14
【问题描述】:

我正在尝试将 netCDF4 包与 python 一起使用。我正在摄取近 2000 万条数据记录,每条 28 字节,然后我需要将数据写入 netCDF4 文件。昨天,我尝试一次执行所有操作,执行一个小时左右后,python 停止运行代码并显示非常有用的错误消息:

Killed.

无论如何,对数据的子部分执行此操作后,很明显,在 2,560,000 条记录和 5,120,000 条记录之间的某处,代码没有足够的内存,必须开始交换。当然,性能会大大降低。所以两个问题: 1)有人知道如何使这项工作更有效吗?我在想的一件事是以某种方式以增量方式放入数据的子部分,而不是一次全部完成。有谁知道该怎么做? 2)我推测“Killed”消息是在内存最终耗尽时发生的,但我不知道。任何人都可以对此有所了解吗?

谢谢。

附录:netCDF4 提供了这个问题的答案,你可以在我对我自己的问题给出的答案中看到。所以目前,我可以继续前进。但这里有另一个问题:netCDF4 的答案不适用于 netCDF3,而 netCDF3 也不会消失。任何人都知道如何在netCDF3的框架中解决这个问题?再次感谢。

【问题讨论】:

    标签: python numpy netcdf


    【解决方案1】:

    不看代码很难判断你在做什么,但你可以尝试在将一些数据写入文件后使用sync 命令将内存中的数据刷新到磁盘:

    http://netcdf4-python.googlecode.com/svn/trunk/docs/netCDF4.Dataset-class.html

    【讨论】:

    • 我认为我正在做的事情非常简单。我定义了几个列表——准确地说是 8 个。假设其中一个名为“var”。然后我用一堆(近 2000 万个)附件填充它。然后我使用 netCDF4.createVariable 创建“netvar”。然后我尝试将“var”数据放入“netvar”:netvar[:]=var。超过一定大小的 var,代码似乎无法处理它。查看sync,这听起来可能会有所帮助,但我没有看到任何有关如何实际使用它的文档。谢谢。
    • 如果您使用f = netcdf.Dataset('test.nc', 'w') 之类的操作来创建文件,那么偶尔您会使用f.sync()
    • 终于有机会试试这个了。似乎工作。我得到的 netCDF 文件比我通过设置 HDF5 块大小得到的要大得多。这是意料之中的,还是表明我做错了什么?谢谢。
    【解决方案2】:

    netCDF4 中有一个现成的答案:用一些指定的“块大小”声明 netCDF4 变量。我用了10000,一切都进行得很好。正如我在回答的编辑中指出的那样,我也想在 netCDF3 中找到解决此问题的方法,因为 netDF3 还远未消亡。

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 2021-08-24
      • 2020-06-02
      • 2015-11-29
      相关资源
      最近更新 更多