【发布时间】:2014-05-24 01:33:57
【问题描述】:
在我的一个程序中,我使用了一个稀疏的数据数组,它目前被实现为一个整数索引的字典,如下所示:
{
0: {some dict with data},
1: {some similar but yet different dict},
10: {...},
100: {...},
200: {...},
etc
}
事实证明,这个 dict 对于我的目的来说占用了太多的内存。有没有办法更有效地存储稀疏数组?为了减少内存消耗,我准备牺牲访问时间毫秒。关键范围为0..0xFFFFFF,稀疏度约为30%。
虽然第 3 方模块可能是一个选项,但我对纯 Python 解决方案更感兴趣。
谢谢。
为了澄清,内部 dicts 不受优化,我只是试图以更好的方式安排它们。为简单起见,让我们假设我有字符串而不是字典:
data = {
0: "foo",
1: "bar",
10: "...",
100: "...",
200: "...",
etc
}
【问题讨论】:
-
不确定您的意思,您使用的内存与您的值一样多,不确定这“占用太多内存”是如何产生的,不就是您需要的内存量吗?或者,也许你在问压缩?也许这有帮助:stackoverflow.com/questions/10264874/…
-
@Lawrence:这不一定是真的:字典有一些开销。举个简单的例子,比较
sys.getsizeof([("a", 1), ("b", 2)])和sys.getsizeof({"a": 1, "b": 2}) -
@DavidRobinson:是的,但是开销非常小,而且很可能无法变得更小,而不是纯 python。也许如果数据中存在模式,则可以通过不同的排列或自定义“压缩”算法来实现...
-
内部字典中有什么样的数据?这种结构的内存消耗是由内部dicts支配的,所以在不了解它们的情况下,不可能给出有用的答案。
-
我知道这就是您所希望的。我想说的是,你不可能通过这种方式获得任何东西。至少 95% 的内存消耗是由你的内心决定的。即使您设法将外部 dict 的消耗量压缩了 10 倍,您的总内存消耗最多也只能减少到 95.5%,这几乎没有帮助。
标签: python arrays python-2.7 dictionary sparse-matrix