【发布时间】:2017-05-05 17:26:27
【问题描述】:
我有一个线性系统,其中所有矩阵都是块对角线。它们具有形状相同的N 块。
矩阵以压缩格式存储为形状为(N, n, m) 的numpy 数组,而向量的形状为(N, m)。
我目前将矩阵向量乘积实现为
import numpy as np
def mvdot(m, v):
return (m * np.expand_dims(v, -2)).sum(-1)
由于广播规则,如果矩阵的所有块都相同,我只需将其存储在形状为 (1, n, m) 的数组中一次:带有向量 (N, m) 的乘积仍然给出正确的 (N, n) 向量.
我的问题是:
- 如何实现高效的矩阵-矩阵乘积,从形状为
(N, n, p)和(N, p, m)的两个矩阵中生成形状为(N, n, m)的矩阵? - 有没有办法使用
numpy内置(可能更快)函数来执行这些操作?np.linalg.inv之类的函数让我觉得numpy旨在支持块对角矩阵的这种压缩格式。
【问题讨论】:
-
听起来你也可以对块对角系统使用具有稀疏表示的标准矩阵乘法。
-
什么意思?使用
dot方法? -
是的,您可以将张量 (N,n,m) 保留为稀疏的二维矩阵 (Nn,Nm),而不是使用张量 (N,n,m) 作为压缩格式表示并使用稀疏矩阵矩阵乘法或矩阵向量乘法。
-
你想到了哪个备用矩阵类?
标签: python numpy multidimensional-array vectorization linear-algebra