混洗和导入保存的 numpy 文件的几行

Shuffling and importing few rows of a saved numpy file

我有 2 个保存的 .npy 文件:

X_train - (18873, 224, 224, 3) - 21.2GB
Y_train - (18873,) - 148KB

X_train 是猫和狗的图像(猫在第一半,狗在第二半,未打乱)并用 Y_train 映射为 0 和 1。因此 Y_train 是[1,1,1,1,1,1,.........,0,0,0,0,0,0].

我想随机导入256张图片(猫狗图片占近50-50%)在X和它在Y的映射,由于数据量大,无法导入X_train 在我的 RAM 中。

因此我尝试了(第一种方法):

import numpy as np
np.random.seed(666555)
X_train = np.load('Processed/X_train.npy', mmap_mode='r')
X = np.random.shuffle(X_train)
X = X[:256, :, :, :]
Y_train = np.load('Processed/Y_train.npy', mmap_mode='r')
Y = np.random.shuffle(Y_train)
Y = Y[:256]

这会产生以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-68-8b2a13921b8d> in <module>
      2 np.random.seed(666555)
      3 X_train = np.load('Processed/X_train.npy', mmap_mode='r')
----> 4 X = np.random.shuffle(X_train)
      5 X = X[:256, :, :, :]
      6 Y_train = np.load('Processed/Y_train.npy', mmap_mode='r')

mtrand.pyx in numpy.random.mtrand.RandomState.shuffle()

mtrand.pyx in numpy.random.mtrand.RandomState.shuffle()

ValueError: assignment destination is read-only

我也试过(第二种方法):

import numpy as np
np.random.seed(666555)
X = np.memmap('Processed/X_train.npy', 'float64', shape = (256, 224, 224, 3), mode = 'c')
Y = np.memmap('Processed/Y_train.npy', 'float64', shape = (256), mode = 'c')
X = np.random.shuffle(X)
Y = np.random.shuffle(Y)
print(X)
print(Y)

这输出:

None
None

在第二种方法中,我将只获得猫的图像,因为 np.memmap 将只收集第 256 张图像。那么洗牌就没有用了

请告诉我如何用任何方法做到这一点。

你的洗牌程序不正确。按照这种策略,您还以与 Y 不同的方式洗牌 X(洗牌后 X 和 Y 之间不再匹配)。这是一个示范性的例子:

np.random.seed(666555)
xxx = np.asarray([1,2,3,4,5,6,7,8,9])
yyy = np.asarray([1,2,3,4,5,6,7,8,9])
np.random.shuffle(xxx)
np.random.shuffle(yyy)

print((yyy == xxx).all()) # False

这里是正确的程序:

np.random.seed(666555)
xxx = np.asarray([1,2,3,4,5,6,7,8,9])
yyy = np.asarray([1,2,3,4,5,6,7,8,9])
idx = np.arange(0,len(xxx))
np.random.shuffle(idx)

print((yyy[idx] == xxx[idx]).all()) # True

通过这种方式,您还解决了 None 问题