我有两个不同的numpy数组,我想以异步方式将它们洗牌。切片没有意见(或:洗牌多个阵列)
目前的解决方案是从https://www.tensorflow.org/versions/r0.8/tutorials/mnist/pros/index.html取出并进行如下:
perm = np.arange(self.no_images_train)
np.random.shuffle(perm)
self.images_train = self.images_train[perm]
self.labels_train = self.labels_train[perm]
的问题是,它的每个I做时间加倍存储器。不知怎的,旧的数组没有被删除,可能是因为切片操作符创建视图,我猜。我尝试了下面的改变,出于纯粹的绝望:
perm = np.arange(self.no_images_train)
np.random.shuffle(perm)
n_images_train = self.images_train[perm]
n_labels_train = self.labels_train[perm]
del self.images_train
del self.labels_train
gc.collect()
self.images_train = n_images_train
self.labels_train = n_labels_train
仍然是一样的,内存泄漏,我经历了几个操作后内存不足。
顺便说一句,这两个数组的排名是100000,224,244,1和100000,1。
我知道这已经在这里处理过了(Better way to shuffle two numpy arrays in unison),但答案并没有帮助我,因为提供的解决方案需要再次切片。
感谢您的任何帮助。
那些不是意见。您可能在其他地方有其他对原始数组的引用。 – user2357112
*“...因为切片运算符创建视图我猜。”*切片*确实*创建视图,但您显示的代码不切片。当你写'a [perm]'时,就会复制一份。 “切片”是指使用冒号的操作:“开始:结束:步骤”,例如, '0:4','4:'等 –
*“...以异步方式。”*我想你错过了一个空间。基于下面的内容,我认为你的意思是“以同步的方式”。 –