5

想要在 1D 和 2D 数组之间执行元素比较。1D 数组的每个元素都需要与 2D 的相应行进行比较(例如更大),并且将创建一个掩码。这是一个例子:

A = np.random.choice(np.arange(0, 10), (4,100)).astype(np.float)
B = np.array([5., 4.,  8.,  2. ])

我想要做

A<B 

这样 A 的第一行将与 B[0] 进行比较,即 5。结果将是一个布尔数组。

如果我尝试这个,我会得到:

operands could not be broadcast together with shapes (4,100) (4,)

有任何想法吗?

4

1 回答 1

8

您需要在数组中插入一个额外的维度B

A < B[:, None]

这允许 NumPy 正确匹配两个形状以进行广播;B现在有形状 (4, 1) 并且尺寸可以配对:

(4, 100)
(4,   1)

规则是维度具有相同的长度,或者长度之一需要为 1;这里 100 可以与 1 配对,4 可以与 4 配对。在插入新维度之前,NumPy 尝试将 100 与 4 配对,导致错误。

于 2015-10-09T19:37:47.360 回答