如何在NumPy的4维数组中随机抽取6000个样本?
解决方法
你完全可以针对数组的**样本维度(第一个维度,共25036个样本)**生成随机索引,再用这些索引提取样本,根本不需要重塑数组:
方法1:无放回随机抽样(推荐,避免重复选到同一样本)
import numpy as np # 生成6000个不重复的随机索引,范围覆盖所有样本 random_indices = np.random.choice(train_images.shape[0], size=6000, replace=False) # 通过索引提取样本,结果保持(6000, 12, 15, 15)的形状 selected_train_images = train_images[random_indices]
方法2:有放回随机抽样(允许重复选到同一样本)
如果你的场景允许重复抽取同一样本,只需修改replace参数:
random_indices = np.random.choice(train_images.shape[0], size=6000, replace=True) selected_train_images = train_images[random_indices]
方法3:用随机排列实现无放回抽样
另一种等价的无放回抽样方式是先打乱所有样本的索引,再截取前6000个:
shuffled_indices = np.random.permutation(train_images.shape[0]) selected_train_images = train_images[shuffled_indices[:6000]]
为什么这个思路能解决问题?
np.random.choice报错是因为你直接传入了多维数组,但它默认只能处理一维数组。而我们真正要随机选择的是第一个维度的完整样本,所以只需要生成该维度的随机索引,再通过numpy的索引切片功能提取对应样本即可,全程不会改变数组的维度结构。
内容的提问来源于stack exchange,提问作者Kalu Samuel
相关产品推荐
相关产品推荐

