Python 在不将整个数据加载到磁盘上的情况下使用巨大的numpy阵列

Python 在不将整个数据加载到磁盘上的情况下使用巨大的numpy阵列,python,numpy,memory-management,tensorflow,Python,Numpy,Memory Management,Tensorflow,我有一组很大的图像补丁,我以前将它们存储在一个numpy数组中[n_patchesxWxHx3](其中n_补丁非常大) 我需要执行以下两个操作一定次数: 首先洗牌补丁的索引 然后,通过在我需要的时间生成每次BATCH\u SIZE补丁来迭代集合,然后我可以丢弃它们 我的方法是使用TensorFlow存储库中的一个(在contrib.learn.python.learn.datasets.mnist中),它创建一个巨大的numpy数组,并使用next\u batch方法对其进行迭代: de

我有一组很大的图像补丁,我以前将它们存储在一个numpy数组中
[n_patchesxWxHx3]
(其中
n_补丁
非常大)

我需要执行以下两个操作一定次数:

  • 首先洗牌补丁的索引
  • 然后,通过在我需要的时间生成每次
    BATCH\u SIZE
    补丁来迭代集合,然后我可以丢弃它们
我的方法是使用TensorFlow存储库中的一个(在
contrib.learn.python.learn.datasets.mnist
中),它创建一个巨大的numpy数组,并使用
next\u batch
方法对其进行迭代:

  def next_batch(self, batch_size, fake_data=False):
    """Return the next `batch_size` examples from this data set."""
    if fake_data:
      fake_image = [1] * 784
      if self.one_hot:
        fake_label = [1] + [0] * 9
      else:
        fake_label = 0
      return [fake_image for _ in xrange(batch_size)], [
          fake_label for _ in xrange(batch_size)
      ]
    start = self._index_in_epoch
    self._index_in_epoch += batch_size
    if self._index_in_epoch > self._num_examples:
      # Finished epoch
      self._epochs_completed += 1
      # Shuffle the data
      perm = numpy.arange(self._num_examples)
      numpy.random.shuffle(perm)
      self._images = self._images[perm]
      self._labels = self._labels[perm]
      # Start next epoch
      start = 0
      self._index_in_epoch = batch_size
      assert batch_size <= self._num_examples
    end = self._index_in_epoch
    return self._images[start:end], self._labels[start:end]
def next_batch(自身、批次大小、假数据=假):
“”“返回此数据集中的下一个“批次大小”示例。”“”
如果数据是假的:
假图像=[1]*784
如果self.one_热:
假标签=[1]+[0]*9
其他:
假标签=0
返回[xrange中的u的假图像(批量大小)][
xrange(批次大小)中的伪标签
]
开始=自。\索引\u在\u期间
self.\u index\u in\u epoch+=批量大小
如果在self.\u epoch>self.\u num中使用self.\u索引\u示例:
#完成时代
自。_时代_完成+=1
#洗牌数据
perm=numpy.arange(self.\u num\u示例)
numpy.random.shuffle(perm)
self.\u images=self.\u images[perm]
self.\u labels=self.\u labels[perm]
#开始下一个时代
开始=0
self.\u index\u in\u epoch=批量大小

assert batch_size看看
numpy.memmap
numpy.load(…,mmap_mode='r')
memmap看起来很有希望!谢谢我会调查的!