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

