2017-05-27 229 views
0

我试图创建一个自主RC车,我的Python程序应该查询给定时间间隔的实况流并将其添加到训练数据集中。我想要收集的数据是来自OpenCV的当前图像阵列以及汽车当前的速度和角度。然后我会喜欢它被加载到Keras进行处理。如何保存大型Python numpy数据集?

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

+0

使用数据库(很多选择)或者HDF5。 Numpy可以存储多个数组(我认为它叫做save​​z),但是实时更新不是它的目的(并且HDF5也可能是有限的)。 – sascha

+0

如果我使用HDF5,我能够将新信息添加到数据集中,还是将它全部加载到内存中并一次保存? –

+0

[可扩展数据集](https://support.hdfgroup.org/HDF5/Tutor/extend.html)。是的,它可能工作,也许没有那么多的数据库工作,它也是常见的keras输入之一,但我真的认为数据库方法更强大(我相信HDF5方式比数据库更少)。 – sascha

回答

0

最简单的方法是np.savez_compressed()。这可以节省任何数量的阵列,使用与np.save()相同的格式,但封装在标准Zip文件中。

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

1

与性能或效率的任何事情一样,请亲自测试一下。推荐“最好”任何事情的问题是它们可能每年都会发生变化。

首先,你应该确定这是否是一个应该解决的问题。如果您没有遇到性能问题或存储问题,那么在出现问题之前不要打扰优化。不管你做什么,都不要浪费你过早的优化时间。

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

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