如何从Numpy ndarray随机移除11个样本以调整为(-1,6,10)形状
实现方案
核心思路
原数组共5891个样本,移除11个后剩余5880个,刚好能被6整除(5880 ÷ 6 = 980),所以最终可重塑为(980, 6, 10)的3D数组。具体分三步实现:
- 生成11个不重复的随机索引,标记要删除的样本
- 过滤数组,移除标记的样本
- 将过滤后的2D数组重塑为目标3D形状
完整代码示例
import numpy as np # 假设原数组为arr,形状(5891, 10) # 生成11个不重复的随机删除索引 remove_indices = np.random.choice(arr.shape[0], size=11, replace=False) # 移除指定样本,得到(5880, 10)的数组 filtered_arr = np.delete(arr, remove_indices, axis=0) # 重塑为3D数组,-1让numpy自动计算第一个维度的长度 final_3d_arr = filtered_arr.reshape(-1, 6, 10) # 验证最终形状 print(final_3d_arr.shape) # 输出:(980, 6, 10)
关键细节说明
np.random.choice参数replace=False保证不会重复选中同一个样本,避免误删多次;np.delete的axis=0指定沿着样本维度(行方向)删除,确保特征维度(10列)不受影响;reshape(-1,6,10)中-1是占位符,numpy会根据总样本数和后面两个维度的大小自动计算出第一个维度为980。
内容的提问来源于stack exchange,提问作者witheringwhispers
相关产品推荐
相关产品推荐

