2011-11-03 94 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数据结构(以某种方式)更快。

相关问题