python - 字典的稀疏数组 - 高效表示

标签 python arrays python-2.7 dictionary sparse-matrix

在我的一个程序中,我使用稀疏数据数组,它目前被实现为整数索引字典,如下所示:

{
   0: {some dict with data},
   1: {some similar but yet different dict},
   10: {...},
   100: {...},
   200: {...},
   etc
}

事实证明,这个字典对于我的目的来说占用了太多的内存。有没有一种方法可以更有效地存储稀疏数组?为了减少内存消耗,我准备牺牲几毫秒的访问时间。键值范围为0..0xFFFFFF,稀疏度约为30%。

虽然第 3 方模块可能是一种选择,但我对纯 python 解决方案更感兴趣。

谢谢。

澄清一下,内部字典不受优化,我只是想以更好的方式排列它们。为了简单起见,我们假设我有字符串而不是字典:

data = {
   0: "foo",
   1: "bar",
   10: "...",
   100: "...",
   200: "...",
   etc
}

最佳答案

如果结构是映射的,那么类似字典的对象确实是正确的选择,如果内存是一个问题,那么明显的解决方案是处理文件。最简单的方法可能是使用 pandas Series,可以用作dict,可以直接通过HDF5文件工作(参见http://pandas.pydata.org/pandas-docs/stable/io.html#hdf5-pytables)

或者,对于纯 python 解决方案,您可以使用 shelve模块。

关于python - 字典的稀疏数组 - 高效表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22986437/

相关文章:

python - 在 Python 中使用 OpenCv2 编写多个图像

python - 查找 numpy 数组中超过先前值的值的索引

c++ - 在C++中将子类插入到父类(super class)数组中

c# - 如何比较两个字符串数组的序列

python - 在python OpenCV中使用特定的高度和宽度调整和填充图像会导致错误和不准确的结果

c# - 在 python 中编码时在 c# 中解码 base64

python - 如何确定找到的两个键是否属于字典列表中的同一字典

c - 指向空数组的指针

python - 通过正则表达式提取带有 "only"的url链接 ".php.com"

python - 获取字典中具有第二个和第三个最大值的键