我正在寻找一种从给定向量A_{ij}
和另一个向量创建新矩阵b_i
的快速方法
矩阵C_{ij}
。新矩阵的组件应具有以下形式:
A_{ij} = b_i * C_{ij}.
到目前为止,我正在使用
dot(diag(b), C)
,但是点积自然会有很多乘法零,效率很低。有没有更好的办法?
最佳答案
将*
(元素级产品)与相应广播一起使用:
>>> b = array([1,2,3])
>>> C = arange(9).reshape(3,3)
>>> dot(diag(b), C)
array([[ 0, 1, 2],
[ 6, 8, 10],
[18, 21, 24]])
>>> atleast_2d(b).T * C
array([[ 0, 1, 2],
[ 6, 8, 10],
[18, 21, 24]])
atleast_2d(b).T
(或b.reshape(-1,1)
)将向量b
整形为列向量。