我在观察一些奇怪的行为我想弄明白。
不幸的是,我没有具体的例子,因为我不能分享我的数据。用b我创建了一个随机布尔值的2d矩阵。
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也有3维,B也是布尔2维,当我a[~b].shape
结果是一个2维向量,在第0维中有大约12倍多的行。与a的输入维(104529,12,11)和b的输入维(104529,12)相比,输出I为1.61M X 11。
当我在b上进行子集划分时,我们确实看到了一些看起来合理的东西:
a[b].shape
(85472, 11)
一些奇怪结果的证据:
1条答案
按热度按时间cigdeys31#
你看到的行为在numpy索引指南中有描述,因为你的掩码
b
的形状是(104529, 12)
,我们可以预期a[b]
的结果最多有104529 * 12 = 1254348
个条目,如果掩码处处为True,就会发生这种情况。这个值大于1168876,所以你的结果是合理的。事实上,这意味着你的掩码
b
里面正好有1168876个True
值。注意1254348 - 1168876 = 85472
,这是你用~b
索引时得到的结果数;)