2011-11-03 2 views
2

지금은 간단한 목록에 복셀을 저장하고 있습니다. ([00000100,1 ...])는 을 나는이 기능을 사용 목록에서 복셀 높은 게재 순위를 검색하려면 :3D 복셀 데이터를 처리하는 가장 좋은 방법은 무엇입니까?

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을 사용하는 것이 더 빠를 것이라고 생각하지만 너무 많은 메모리를 사용합니다.

이 두 가지 사이의 타협점을 찾도록 도와 줄 수 있습니까?

답변

3

목록을 bytearray으로 바꿀 수 있습니다. 보셀 당 한 비트의 정보를 유지한다고 가정하면 바이트 당 8 개의 보셀을 저장할 수 있습니다.

ndarray, NumPy에서 시도해 볼 수도 있습니다. 256 × 256 × 256 배열을 효율적으로 구성 할 수 있습니다.이 배열은 일반 Python 데이터 구조 (특정 방식)보다 공간을 덜 차지하고 액세스 및 조작이 빠릅니다.

0

방대한 양의 복셀을 처리해야하는 경우 DreamWorks의 오픈 소스 라이브러리를 확인하고 싶을 수 있습니다.

http://www.openvdb.org