python多维数据存储_在Python中存储和重新加载大型多维数据集

我将运行大量的模拟,产生大量的数据,这些数据需要在以后存储和访问。我的模拟程序的输出数据被写入文本文件(每个模拟一个)。我计划编写一个Python程序来读取这些文本文件,然后以更便于以后分析的格式存储数据。经过一段时间的搜索,我想我正遭受信息过载的困扰,所以我把这个问题放到堆栈溢出中寻求一些建议。具体情况如下:

我的数据基本上采用多维数组的形式,其中每个条目都将如下所示:data[ stringArg1, stringArg2, stringArg3, stringArg4, intArg1 ] = [ floatResult01, floatResult02, ..., floatResult12 ]

每个参数的潜在值大致如下:

字符串arg1:50

字符串arg2:20

字符串arg3:6

字符串arg4:24

图1:10000

但是请注意,数据集是稀疏的。例如,对于给定的stringArg1值,将只填充stringArg2的大约16个值。另外,对于给定的(stringArg1,stringArg2)组合,将填充大约5000个intArg1值。第3个和第4个字符串参数总是完全填充。在

因此,使用这些数字,我的数组将有大约50*16*6*24*5000=576000000个结果列表。在

我正在寻找存储这个数组的最佳方法,这样我就可以保存它并在以后重新打开它,以添加更多数据、更新现有数据或查询现有数据以进行分析。到目前为止,我已经研究了三种不同的方法:关系数据库

PyTables

使用元组作为字典键的Python字典(使用pickle保存和重新加载)

在这三种方法中我都会遇到一个问题,我总是将(stringArg1、stringArg2、stringArg3、stringArg4、intArg1)的每个元组组合存储为表中的字段,或作为Python字典中的键。从我(可能是天真的)的观点来看,这似乎没有必要。如果这些都是整型参数,那么它们只会形成数组中每个数据项的地址,就不需要在单独的字段中存储所有可能的地址组合。例如,如果我有一个2x2数组=[[100,200],[300,400]],你可以通过在地址数组[0][1]上请求值来检索值。您不需要将所有可能的地址元组(0,0)(0,1)(1,0)(1,1)存储到其他地方。所以我希望能找到一个解决这个问题的办法。在

我希望能够在PyTables中定义一个表,其中第一个表中的单元格包含其他表。例如,顶级表将有两列。第一列中的条目将是stringArg1的可能值。第二列中的每个条目都是一个表。这些子表将有两列,第一列是stringArg2的所有可能值,第二列是子表的另一列。。。在

这种解决方案将很容易浏览和查询(尤其是如果我可以使用vitalables来浏览数据)。问题是PyTables似乎不支持一个表的单元格包含其他表。所以我似乎在那里遇到了一个死胡同。在

我已经阅读了数据仓库和星型模式方法,但事实表似乎仍然需要包含每个可能的参数组合的元组。在

好吧,那就是我现在的处境。任何和所有的建议将不胜感激。在这一点上,我一直在四处寻找,以至于我的大脑受伤了。是时候请专家们想想了。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值