dang it. This looks like I'm just passing around arrays that are too big. I think for this I might need some help from other people about the right way to do this... Ideas, anybody?
Hm, at the risk of replying to my own message, we might be able to do this by using a memmap onto the disk. But then we'd be assuming homogenous clusters, which honestly, I think we should just go ahead and assume. But I'd rather keep things off the disk if at all possible. I suppose when we're dealing with arrays of this size, though, it does become a bit prohibitive...
-Matt