Numpy中不删除原数组、不生成拷贝前提下排除指定行的实现方法
针对你的需求,这里提供两种符合内存要求的高效实现方案,你可以根据自身使用场景选择:
方案1:零数据拷贝的掩码数组方案
如果你不需要生成新的独立数组,仅在后续计算、访问时自动跳过目标行,推荐用numpy掩码数组实现,仅新增极小的布尔掩码数组,完全不复制原数组的数值,内存开销可以忽略:
import numpy as np # 构造掩码:标记所有子数组的第3行(0起始索引为3)为隐藏状态 mask = np.zeros(n.shape, dtype=bool) mask[:, 3, :] = True # 生成掩码数组 filtered_n = np.ma.masked_array(n, mask=mask)
后续你对filtered_n做求和、均值、遍历等常规numpy操作时,都会自动忽略被标记的第3行,原数组不会有任何修改。
方案2:轻量索引生成目标数组
如果你必须要得到形状为(N,4,3)的标准numpy数组(N为子数组数量),可以直接用索引选取指定行,这是numpy底层优化的实现,效率远高于delete方法:
# 0起始索引下,选取第0、1、2、4行,跳过索引为3的第3行 filtered_n = n[:, [0,1,2,4], :]
运行后输出完全符合你给出的预期结果。
内容的提问来源于stack exchange,提问作者Sandeep Kumar Kushwaha
相关产品推荐
相关产品推荐

