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
相关产品推荐
相关产品推荐

