【发布时间】:2010-11-06 16:53:41
【问题描述】:
我正在使用一个大矩阵(250x250x30 = 1,875,000 个单元格),我想要一种方法来为这个矩阵中的每个单元格设置任意数量的标志,以某种易于使用且合理节省空间的方式.
我最初的计划是一个 250x250x30 的列表数组,其中每个元素类似于:["FLAG1","FLAG8","FLAG12"]。然后我将其更改为仅存储整数:[1,8,12]。这些整数由 getter/setter 函数在内部映射到原始标志字符串。这仅使用 250mb,每点 8 个标志,这在内存方面很好。
我的问题是:我是否错过了另一种构建此类数据的明显方法?
感谢大家的建议。我最终将一些建议合二为一,遗憾的是我只能选择一个答案,不得不忍受对其他人的支持:
编辑:erm 我在这里的初始代码(使用集合作为 3d numpy 数组的基本元素)使用了大量内存。这个新版本在填充randint(0,2**1000) 时使用了大约 500mb。
import numpy
FLAG1=2**0
FLAG2=2**1
FLAG3=2**2
FLAG4=2**3
(x,y,z) = (250,250,30)
array = numpy.zeros((x,y,z), dtype=object)
def setFlag(location,flag):
array[location] |= flag
def unsetFlag(location,flag):
array[location] &= ~flag
【问题讨论】:
-
你需要支持多少个标志?
-
我不确定,我没有信心说出比“大于 5 且小于 500”更准确的话。