我正在构建一个简单的银河系模型,我需要存储的东西之一是质量密度的 3D 网格。
问题是如果我在星系周围放置一个矩形框,大部分网格单元都是空的。这让我节省了很多无用的零。所以朴素的数组似乎很浪费:
galaxy = [[[0 for k in xrange(1601)] for j in xrange(1601)] for i in xrange(253)]
# then fill in i,j,k values that are non-zero
我尝试使用字典构建稀疏数组:
for x in range(1601):
for y in range(1601):
for z in range (253):
galaxy[str(x) + "," + str(y) + "," + str(z)] = # whatever
但是,(除了丑陋之外)我用于键的字符串占用的内存比我节省的要多。我得到OutOfMemoryError
s 是因为(我计算出)键本身就占用了几场内存。
在某个时候,我会想要提高模型的分辨率,这意味着更大的网格。有没有比使用 3D 浮点数组更有效的方法来存储我的值?
我还担心遍历所有单元格(或仅是网格中的非零单元格)所花费的时间。这将非常重要。