如何按索引对numpy二维数组进行掩码操作?
Numpy 二维数组保留指定索引区间其余设为nan的实现方案
直接通过numpy的切片索引操作即可实现,全程不改变数组形状、原有索引和总长度,实现逻辑如下:
前置说明
假设你的二维数组命名为arr,第一个维度长度为800,形状为(800, 任意长度)。
注意:numpy切片为左闭右开规则,若你需要保留的是600到700的闭区间(包含600和700两个端点),切片写为600:701;若为左闭右开区间(包含600不包含700),切片写为600:700即可。
实现代码
方法1:直接给非目标区域赋值nan(最简便)
直接覆盖不需要保留的区域,不会改动目标区间的原有值:
import numpy as np # 此处为模拟生成的测试数组,替换为你自己的数组即可 arr = np.random.rand(800, 5) # 保留600~700闭区间元素,其余设为nan arr[:600, :] = np.nan arr[701:, :] = np.nan
方法2:备份目标区间后回写(逻辑更稳妥,避免赋值失误)
适合对索引范围不熟悉的场景,不会误改目标区间数据:
import numpy as np arr = np.random.rand(800, 5) # 1. 备份需要保留的区间数据 keep_segment = arr[600:701, :].copy() # 2. 全数组设为nan arr[:] = np.nan # 3. 把备份数据写回原索引位置 arr[600:701, :] = keep_segment
验证说明
操作完成后可以通过以下代码验证结果:
- 查看数组形状是否不变:
print(arr.shape)输出应为(800, 你的第二维度长度) - 查看非目标区域是否为nan:
print(np.all(np.isnan(arr[:600])))输出应为True - 查看目标区域是否保留原有值:
print(np.all(arr[600:701] == keep_segment))输出应为True
内容的提问来源于stack exchange,提问作者denali11
相关产品推荐
相关产品推荐

