【发布时间】:2020-06-25 11:59:39
【问题描述】:
我保存了 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].
我想随机导入 X 中的 256 张图像(猫和狗图像均占近 50-50%)及其在 Y 中的映射。由于数据量很大,我无法在我的 RAM 中导入 X_train。
因此我尝试了(第一种方法):
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 张图像。那么洗牌就没用了。
请告诉我如何用任何方法做到这一点。
【问题讨论】:
-
我想你想从 mmap 文件中随机选择一个包含 256 个项目的列表。我不会尝试就地改组文件。
-
另外,你想
random.shuffle单独的数组吗?这会混淆标签! -
是的,我只想从 X 中的 X_train 和 Y 中的 Y_train 中随机选取 256 个项目。好吧,我从@Marco Cerliani 的以下答案中得到了解决方案
标签: python numpy numpy-ndarray numpy-memmap