在 python 中沿轴广播/扩展布尔数组
broadcast / extend boolean array along axis in python
我正在尝试沿向量广播一维布尔数组以隔离某些操作。
例如,如果我的布尔数组是:
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]])
我知道这可以通过切片来完成,但我需要通过使用逻辑数组来提高速度。有没有办法 "extend" 布尔向量,以便它在行上工作?
我们的想法是能够在一行中计算一个函数,这样
D = b * A * (some operation done over all vectors) + ~b * A * (some different operation done over all vectors)
谢谢!
扩展b
到2D
,保持第二个轴为单一维度(length = 1
的维度)并乘以A
。因此,在引擎盖下 b
将被广播为与 A
相同的形状,并且将执行逐元素乘法。
因此,矢量化解为 -
A*b[:,None]
我正在尝试沿向量广播一维布尔数组以隔离某些操作。
例如,如果我的布尔数组是:
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]])
我知道这可以通过切片来完成,但我需要通过使用逻辑数组来提高速度。有没有办法 "extend" 布尔向量,以便它在行上工作?
我们的想法是能够在一行中计算一个函数,这样
D = b * A * (some operation done over all vectors) + ~b * A * (some different operation done over all vectors)
谢谢!
扩展b
到2D
,保持第二个轴为单一维度(length = 1
的维度)并乘以A
。因此,在引擎盖下 b
将被广播为与 A
相同的形状,并且将执行逐元素乘法。
因此,矢量化解为 -
A*b[:,None]