重写矩阵乘法

计算科学 matlab 矩阵
2021-12-22 19:13:26

我在 Matlab 中有一个矩阵乘法,如下所示

W^=NWNT,
在哪里T指换位。N是维度为 mxn 且 W = diag(G) 的关联矩阵,其中 G 是 1 xn 行向量,使得 diag(G) nx n。所以基本上,当我有一个大向量 G 时,例如超过 1000 个元素,我的内存不足,因为我有一个包含 nxn 个元素的对角矩阵,其中大多数元素为零。有没有办法在 Matlab 中以更有效的方式编写这种乘法?

2个回答
N * (G' .* N')

几个版本前,Matlab 引入了单例扩展:在括号中的表达式中n×1矩阵G'“升级”为n×m元素乘积之前的矩阵(所有列相等)。

这个新特性提供了一种更简洁的方式来实现以前需要的一些技巧bsxfun

解决方案从这里稍微修改

W2 = N * bsxfun(@times, N, G).';

这适用于N大小m x nG大小1 x n