在矩阵和对角矩阵之间进行矩阵乘法的更快方法?
The faster way to do matrix multiplication between a matrix and a diagonal matrix?
我正在使用 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 乘以对角线?
answer3 = np.multiply(A,diag_elements)
我正在使用 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 乘以对角线?
answer3 = np.multiply(A,diag_elements)