我正在寻找一种从给定向量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整形为列向量。

10-08 15:09