matlab – 缓存矩阵轨迹内的元素

我有这样的评价

D =追踪(ABC)

A和C是不变的常数矩阵. B矩阵不断变化.我想要的是找到一种方法来存储A和C中的一些值,这样我就不必一直计算产品ABC. B会改变,我会使用B的元素的某种产品与AC的某些缓存版本或类似的东西.

我知道跟踪(ABC)=跟踪(BCA)所以我可以预先计算产品CA但CA的维度非常高,因此它不适合内存.因此我不能这样做. ABC结果是低维度所以很好

C is of size 40000x10 and dense
B  of size 80000x40000 but B is sparse so it is fine
A is of size 10 by 80000 and dense

有什么建议我怎么能有效地做到这一点?

最佳答案 如果你考虑tr(ABC)元素,

l = 10,n = 40000,m = 80000.

使用B的稀疏度的上述乘法的数量是np * 10,其中np是B的非零元素的数量.

预计算CA的乘法数为10 * 40000 * 80000.之后,使用B的稀疏度,tr(B(CA))的乘法数是np.因此,除非你的计算超过1 /(B的密度),否则只计算tr(ABC)更快.

话虽这么说,我不认为预先计算CA是必要的.

点赞