我在python中遇到内存使用问题,但还没有找到令人满意的解决方案。
问题很简单:
我将图像集合为形状(n_samples, size_image)
的numpy数组。我需要以相同的方式切割每个图像,并将这些切片一次性提供给分类算法。
如何在不重复内存中的数据的情况下获取numpy数组切片?
天真地,因为切片很简单"视图"对于原始数据,我假设必须有一种方法来进行切片而不在内存中复制数据。
在处理大型数据集(如MNIST手写数字数据集)时,这个问题至关重要。
我尝试使用numpy.lib.stride_tricks.as_strided
找到解决方案,但很难让它在图像集合上运行。
类似的玩具问题是以对记忆友好的方式对scikit
手写数字进行切片。
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
X
具有形状(1797, 64)
,即图片为8x8元素。
窗口大小为6x6时,它将为每个图像提供(8-6 + 1)*(8-6 + 1)= 9个大小为36的切片,从而生成形状sliced_X
的数组(16173, 36)
。 / p>
现在的问题是,如果不使用太多内存,你如何从X
到sliced_X
?