在python中沿轴广播/扩展布尔数组

时间:2016-10-27 08:08:31

标签: python numpy logical-operators numpy-broadcasting

我正在尝试沿向量广播布尔1D数组以隔离某些操作。

例如,如果我的布尔数组是:

b = array([True False False True])

np.shape(b) = (4,)

我的矩阵我想与这种形式进行行式比较:

A = array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0], [10.0, 11.0, 12.0]])

np.shape(A) = (4, 3)

我希望的最终结果是:

C = b * A (row-wise comparison) 

C = array([[1.0, 2.0, 3.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [10.0, 11.0, 12.0]])

我意识到这可以通过切片来完成,但我需要使用逻辑数组来提高速度。有没有办法“扩展”布尔向量,以便它可以在行上工作?

我们的想法是能够在一行中计算一个函数,以便

D = b * A * (some operation done over all vectors) + ~b * A * (some different operation done over all vectors)

谢谢!

1 个答案:

答案 0 :(得分:1)

b扩展为2D,将第二个轴保持为单个维度(维度为length = 1)并乘以A。因此,在引擎盖下b将被广播到与A相同的形状,并且将执行逐元素的乘法。

因此,矢量化解决方案将是 -

A*b[:,None]