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

Python、Numpy:如何用给定掩码选择数组及剩余元素

解决Numpy中选取矩阵剩余列的问题

嘿,这个需求在Numpy里其实有挺直观的解决方式,分两种常见场景给你说明:

情况1:掩码m是布尔数组(最常用的场景)

如果你的掩码m是长度为250的布尔数组(True对应要保留的列,False对应要排除的列),那直接对掩码取反就能拿到剩余列,代码超简洁:

import numpy as np

# 假设A是(10000, 250)的矩阵,m是长度250的布尔掩码
remaining_columns = A[:, ~m]

这里的~是Numpy的按位取反操作,能直接把布尔数组里的True和False互换,刚好对应你要的剩余列。

情况2:掩码m是列索引数组(像你示例里的[1,2,4,...]这种)

如果m是你选中的列的索引列表/数组,我们可以先拿到所有列的索引,再计算出和m的差集,分两种小情况:

方法A:不需要保持原列顺序

用np.setdiff1d直接求差集,它会返回排序后的剩余列索引:

all_cols = np.arange(A.shape[1])  # 生成0到249的所有列索引
remaining_cols = np.setdiff1d(all_cols, m)
result = A[:, remaining_cols]

方法B:需要保持原列顺序

如果不想改变列的原始顺序,就用np.in1d生成"不在m中"的布尔掩码,再筛选索引:

all_cols = np.arange(A.shape[1])
# 生成标记"不在m里"的布尔掩码
mask = np.in1d(all_cols, m, invert=True)
remaining_cols = all_cols[mask]
result = A[:, remaining_cols]

这样得到的剩余列会和原矩阵A的列顺序完全一致,不会被自动排序。

另外提一句,你示例里写的A[([1,2,...])]其实是在选取行哦,如果要选列的话,记得加上逗号,写成A[:, 索引数组]的形式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:34:12