我正在使用一个大矩阵(250x250x30 = 1,875,000 个单元格),我想要一种方法来为这个矩阵中的每个单元格设置任意数量的标志,以某种易于使用和合理的空间效率的方式。
我最初的计划是一个 250x250x30 的列表数组,其中每个元素类似于:["FLAG1","FLAG8","FLAG12"]
. 然后我将其更改为仅存储整数:[1,8,12]
. 这些整数由 getter/setter 函数在内部映射到原始标志字符串。这仅使用 250mb,每点有 8 个标志,这在内存方面很好。
我的问题是:我是否错过了另一种构建此类数据的明显方法?
谢谢大家的建议。我最终将一些建议合二为一,遗憾的是我只能选择一个答案,并且不得不接受其他人的支持:
编辑: erm 我在这里的初始代码(使用集合作为 3d numpy 数组的基本元素)使用了很多内存。这个新版本在填充randint(0,2**1000)
.
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