我正在寻找一种快速的方法来从给定的向量b_i和另一个矩阵C_{ij}创建一个新的矩阵A_{ij}。新矩阵的组件应具有以下形式
A_{ij} = b_i * C_{ij}.到目前为止,我使用的是dot(diag(b), C),但是点积自然有很多与零的乘法,这是相当低效的。有没有更好的方法?
发布于 2013-03-08 11:30:45
您也可以使用einsum
>>> b = np.array([1,2,3])
>>> C = np.arange(9).reshape(3,3)
>>> np.einsum('i,ij->ij', b, C)
array([[ 0, 1, 2],
[ 6, 8, 10],
[18, 21, 24]])在我的机器上,这种方法比两种方法都快
np.dot(np.diag(b), C)和
np.atleast_2d(b).T * C对于100,000个循环,einsum耗时1.16秒,dot耗时1.61秒,atleast_2d耗时2.03秒。
如果您熟悉Einstein summation notation,那么einsum是一个非常有用的函数。使用索引表示法可以更容易地表示许多简单的线性代数运算,并且增加的执行速度只是锦上添花。
https://stackoverflow.com/questions/13683804
复制相似问题