私は天の川の単純なモデルを構築しています。保存する必要があるものの 1 つは、質量密度の 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を得ました。
ある時点で、モデルの解像度を上げたいと思うでしょう。それは、より大きなグリッドを意味します。float の 3D 配列を使用するよりも効率的に値を格納する方法はありますか?
また、すべてのセル (またはグリッド内のゼロ以外のセルのみ) を反復処理するのにかかる時間についても懸念しています。これは非常に重要です。