You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy中如何优雅选取步长采样后的数组补集元素?

Numpy中优雅获取数组步长采样补集的方法

现有如下代码:

aa = np.arange(16)
step = 4
bb = aa[::4]

该代码选取了数组中每第4个元素,现在需要获取bb的补集,期望输出为:

array([1,  2,  3, 5,  6,  7,  9, 10, 11, 13, 14, 15])

已知可通过生成索引再使用np.setdiff1d实现,但希望有更优雅的方法。

方法1:布尔掩码过滤

通过创建布尔数组标记非采样位置,直接索引过滤,高效且直观:

import numpy as np

aa = np.arange(16)
step = 4
mask = np.arange(len(aa)) % step != 0
complement = aa[mask]

方法2:np.delete删除采样索引

直接生成要删除的采样索引,用np.delete一次性移除,代码简洁:

import numpy as np

aa = np.arange(16)
step = 4
delete_indices = np.arange(0, len(aa), step)
complement = np.delete(aa, delete_indices)

方法3:切片拼接(适合固定小步长)

针对固定步长,拼接每段非采样区间的切片,可读性强:

import numpy as np

aa = np.arange(16)
step = 4
complement = np.concatenate([aa[i+1:i+step] for i in range(0, len(aa), step)])

以上三种方法都能得到期望的补集,其中布尔掩码和np.delete的方法通用性更强,适合任意步长和数组长度。

内容的提问来源于stack exchange,提问作者NNN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:25:39