【发布时间】:2019-08-07 07:01:39
【问题描述】:
我正在使用 numpy 在 python 中编写一个计算包,在包中,我会经常在任意大方阵(例如大小 100*100)和相同大小的对角矩阵之间进行矩阵乘法。
我有一个 O(n^2) 的方法,但我认为可以进一步改进。
"""
A is of size 100*100
B is a diagonal matrix
want to do np.dot(A,B) quickly
"""
A=np.random.rand(100,100)
diag_elements=np.random.rand(100)
B=np.diag(diag_elements)
answer1= np.dot(A,B) ###O(n^3) method, quite slow
C=np.zeros((100,100))
C=C+diag_elements
answer2=np.multiply(A,C) ##O(n^2) method, 3times faster for n=100
anwer2 是 O(n^2) 但我认为这还不够好,因为操作 C+=diag_elements 浪费了 1/3 时间并且可以避免。
我希望一些 numpy 函数可以更优雅、更快地进行矩阵乘法。有人可以帮帮我吗?
【问题讨论】:
-
你只是想要乘法的结果还是想要改变A(即原地乘法)?
-
为什么不干脆做-
A*diag_elements?
标签: python numpy array-broadcasting