处理3d体素数据的最佳方法是什么?

时间:2011-11-03 23:43:41

标签: python performance list dictionary voxel

目前我将体素存储在一个简单的列表中。 ([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秒。

我想使用dict会更快,但它会占用过多的内存。

你能帮我找到这两者之间的妥协吗?

2 个答案:

答案 0 :(得分:3)

您可以使用bytearray替换列表。假设每个体素保留一点信息,则每个字节可以存储8个体素。

您也可以ndarray尝试NumPy。您可以有效地构建256×256×256阵列,与普通的Python数据结构(在某些方面)相比,它占用的空间更少,访问和操作更快。

答案 1 :(得分:0)

如果您需要处理大量体素,您可能需要检查DreamWorks中的开源库。

http://www.openvdb.org