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

理解numpy按布尔向量取反进行子集化时的异常行为

NumPy布尔索引异常问题

先展示正常逻辑的测试用例:

import numpy as np

a = np.random.normal(size=(10000, 12, 1000))
p = 0.5
b = np.random.choice(a=[False, True], size=(a.shape[0], a.shape[1]), p=[p, 1-p])

a[b].shape
# 输出:(60037, 1000)

a[~b].shape
# 输出:(59963, 1000)

以上结果符合预期,a[b]与a[~b]的第一维度数量之和等于10000*12=120000。

但在实际数据集里出现了异常:

  • a是形状为(104529, 12, 11)的3维数组
  • b是形状为(104529, 12)的2维布尔矩阵

此时:

  • a[b].shape得到合理结果(85472, 11)
  • a[~b].shape却得到(1610000, 11)的2维数组,第一维度行数约为预期值的12倍,完全不符合正常逻辑。

异常结果示意图:
异常结果示意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:04