2011-11-03 120 views
2

此刻我將體素存儲在一個簡單的列表中。 ([0,0,0,0,0,1,0,0,1 ...]) 要檢索列表中的當前位置素我使用此功能:處理三維體素數據的最佳方法是什麼?

def getBlockKey(self, x, y, z): 

    blockX = x % CFG_CHUNK_SIZE 
    blockY = y % CFG_CHUNK_SIZE 
    blockZ = z % CFG_CHUNK_SIZE 

    return blockX + blockY * CFG_CHUNK_SIZE + blockZ * (CFG_CHUNK_SIZE * CFG_CHUNK_SIZE) 

但這時候很慢處理大量的數據。例如,遍歷256 * 256 * 256塊中的每個立方體需要50秒。

我想它會更快使用字典,但它使用太多的內存。

你能幫我找到這兩者之間的妥協嗎?

回答

3

您可以用bytearray替換列表。假設您保持每個體素的一位信息,則可以存儲每個字節8個體素。

您也可以嘗試ndarray,從NumPy。您可以高效地構建一個256×256×256的數組,它佔用的空間更少,訪問和操作速度比正常的Python數據結構(以某種方式)更快。

相關問題