我有兩個不同的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:'等 –
*「...以異步方式。」*我想你錯過了一個空間。基於下面的內容,我認爲你的意思是「以同步的方式」。 –