【问题标题】:The faster way to do matrix multiplication between a matrix and a diagonal matrix?在矩阵和对角矩阵之间进行矩阵乘法的更快方法?
【发布时间】: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


【解决方案1】:

为什么不简单地将 A 乘以对角线?

answer3 = np.multiply(A,diag_elements)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 2013-12-23
    • 2019-08-09
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多