在Python中存储和重新加载大型多维数据集
我将运行大量的模拟,生成大量的数据,这些数据需要在以后存储和访问。模拟程序的输出数据写入文本文件(每个模拟一个)。我计划编写一个Python程序,读取这些文本文件,然后以更方便以后分析的格式存储数据。经过一段时间的搜索,我认为我正遭受信息过载的困扰,所以我将这个问题提交给Stack Overflow,以寻求一些建议。详情如下: 我的数据基本上采用多维数组的形式,其中每个条目的外观如下所示:在Python中存储和重新加载大型多维数据集,python,multidimensional-array,data-warehouse,pytables,Python,Multidimensional Array,Data Warehouse,Pytables,我将运行大量的模拟,生成大量的数据,这些数据需要在以后存储和访问。模拟程序的输出数据写入文本文件(每个模拟一个)。我计划编写一个Python程序,读取这些文本文件,然后以更方便以后分析的格式存储数据。经过一段时间的搜索,我认为我正遭受信息过载的困扰,所以我将这个问题提交给Stack Overflow,以寻求一些建议。详情如下: 我的数据基本上采用多维数组的形式,其中每个条目的外观如下所示: data[ stringArg1, stringArg2, stringArg3, stringArg4,
data[ stringArg1, stringArg2, stringArg3, stringArg4, intArg1 ] = [ floatResult01, floatResult02, ..., floatResult12 ]
每个参数的潜在值大致如下:
第1点50分
阿根廷2:20
第3页:6页
附件arg4:24
表1:10000
但是,请注意,数据集是稀疏的。例如,对于给定的stringArg1值,将只填充大约16个stringArg2值。此外,对于给定的(stringArg1、stringArg2)组合,大约需要填写5000个intArg1值。第三个和第四个字符串参数始终完全填充
因此,根据这些数字,我的数组将有大约50*16*6*24*5000=576000000个结果列表
我正在寻找存储此数组的最佳方法,以便保存它并在以后重新打开它以添加更多数据、更新现有数据或查询现有数据进行分析。到目前为止,我已经研究了三种不同的方法:
好吧,那就是我现在的位置。如果您有任何建议,我们将不胜感激。在这一点上,我一直在四处寻找,以至于我的大脑受伤了。我想是时候问问专家了 基本6表法不适用有什么原因吗 i、 e.表1-5将是定义每个字段有效值的单列表,然后最终的表将是定义实际存在的条目的5列表
或者,如果第三个和第四个字符串值的每个值都如您所述始终存在,那么第六个表可能只包含3列(string1、string2、int1),您可以通过笛卡尔连接动态生成string3和string4的组合。为什么不使用一个大表来保留所有5亿个条目?如果在飞行压缩中使用(此处建议使用Blosc压缩程序),大部分重复条目都将被删除,因此存储开销将保持在最低限度。我建议尝试一下;有时简单的解决方案效果最好;-) 我不完全确定您在这里要做什么,但看起来您正在尝试创建一个(潜在的)稀疏多维数组。因此,我不会详细讨论如何解决您的具体问题,但我所知道的最好的解决方案是Numpy。小罐 可以用作通用数据的高效多维容器。可以定义任意数据类型。这使得NumPy能够无缝、快速地与各种数据库集成 我已经多次使用Numpy进行模拟数据处理,它提供了许多有用的工具,包括方便的文件存储/访问 希望您能在易于阅读的文档中找到一些东西:
我不清楚您想在这里储存什么。是否不仅要存储当前数据集,还要存储关于不同字段中哪些值组合有效的约束?在您的数据模型明确之前,成功实施高效存储解决方案的机会是有限的。这一点很好。简单是好的,如果它工作。您有关于如何在PyTables表上使用Blosc的示例吗?我是PyTables的新手,在任何地方都找不到示例(无论是在Blosc网站还是PyTables上)。然而,我确实使用一个表和50个整型变量的值来测试我的方案。使用该方案,创建的.h5文件PyTables的大小为450MB!Cleary如果这是goi我需要压缩