【问题标题】:How to save large Python numpy datasets?如何保存大型 Python numpy 数据集?
【发布时间】:2017-10-27 23:12:09
【问题描述】:

我正在尝试创建一辆自动遥控车,我的 Python 程序应该在给定的时间间隔内查询实时流并将其添加到训练数据集中。我要收集的数据是来自 OpenCV 的当前图像数组以及汽车的当前速度和角度。然后我希望将其加载到 Keras 中进行处理。

我发现numpy.save() 只是将一个数组保存到一个文件中。为我的需要保存数据的最佳/最有效方式是什么?

【问题讨论】:

  • 使用数据库(有很多选择)或者 HDF5。 Numpy 可以存储多个数组(我认为它称为 savez),但实时更新并不是它的目的(HDF5 也可能受到限制)。
  • 如果我使用 HDF5,我可以将新信息附加到数据集,还是将其全部加载到内存中并一次性保存?
  • Extendible Dataset。是的,它可能会起作用,而且可能不如 DB 起作用,它也是常见的 keras 输入之一,但我真的认为 DB 方法更强大(而且我相信 HDF5 的方式比 DB 少)。

标签: python opencv numpy keras


【解决方案1】:

与任何有关性能或效率的事情一样,请自行测试。推荐“最佳”事物的问题在于,它们可能每年都在变化。

首先,您应该确定这是否是您应该解决的问题。如果您没有遇到性能问题或存储问题,那么在出现问题之前不要费心进行优化。无论您做什么,都不要将时间浪费在过早的优化上。

接下来,假设它确实是一个问题,尝试每一种保存方法,看看哪种方法在最短的时间内产生最小的结果。也许压缩是答案,但这可能会减慢速度?也许酸洗物体会更快?在你尝试之前谁知道。

最后,权衡取舍并决定可以妥协的方法;你几乎永远不会有一个灵丹妙药的解决方案。当你在做的时候,确定是否只是增加更多的 CPU、RAM 或磁盘空间来解决问题。云计算在这些领域为您提供了很大的空间。

【讨论】:

    【解决方案2】:

    最简单的方法是np.savez_compressed()。这将使用与np.save() 相同的格式保存任意数量的数组,但封装在标准 Zip 文件中。

    如果您需要能够向现有文件添加更多数组,您可以轻松地做到这一点,因为毕竟 NumPy “.npz” 格式只是一个 Zip 文件。因此使用zipfile 打开或创建一个Zip 文件,然后使用np.save() 将数组写入其中。 API 并不完美匹配,因此您可以先构造一个StringIO“文件”,使用np.save() 写入其中,然后在zipfile 中使用writestr()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      相关资源
      最近更新 更多