Numpy - 创建重叠的3D子阵列作为具有高效内存的向量
我试图创建一个列表,其中每个子数组需要被展平的大小相同的所有重叠子阵列的列表(基于分片的分割)作为一维矢量),所以我可以利用sklearn.neighbours.BallTree中的球树。例如,如果给定一个100x100x100的图像,如果我将它分解为5x5x5重叠的补丁(子阵列),那么我将拥有96x96x96 = 884,736个图像。
但是我还没有找到任何方式这样做没有numpy分配更多的内存为每个flattened/vectorized子阵列。这似乎是因为每个子阵列在内存中不是连续的。
例如对于100x100x100的图像,如果我想将每个5x5x5补丁作为一维向量(长度为125),numpy决定在内存中为所有884,736个分配一个全新的阵列,然后它变得相当大,特别是如果我想要处理超过一个100x100x100的图像!
我会欢迎在Python/numpy中克服这种内存挑战的任何解决方案。我正在考虑创建一个numpy.ndarray对象的子类,该对象在更大的图像中存储指向修补程序位置的指针,但仅在调用时才将数据作为一维numpy数组返回(并在不使用时再次删除它)但是我还没有得到足够的关于子类化ndarray对象的细节。如果唯一的解决方案是用C/C++来实现所有的东西,我会非常失望。我很感激可以提供的任何帮助,谢谢!