我有一个矩阵 A (尺寸 mxn )和矢量 b (尺寸 nx1 )。
我想构造一个_repmat_((A*b),[C 1])
的向量,其中 C = n / m 。我使用了大量数据,因此 n~100000 和C~10。
正如您所看到的,这实际上是块矩阵乘法而无需显式创建完整 A 块矩阵(维度 nxn )容易超过可用内存。
A 稀疏且已使用函数_sparse()_
转换。
答案 0 :(得分:0)
看起来你真的应该学会使用稀疏矩阵,而不是想知道如何做到这一点。
SPARSE块对角矩阵如果正确创建它们不会占用大量内存。我将使用我的blktridiag函数,它实际上创建了块三对角矩阵。在这里,我用它来创建随机块对角矩阵。我将非对角元素设置为零,所以它实际上是块对角线。
A = rand(3,3,100000);
tic,M = blktridiag(A,zeros(3,3,99999),zeros(3,3,99999));toc
Elapsed time is 0.478068 seconds.
而且,虽然它不小,但所需的内存不会超过存储对角线元素所需的内存的两倍。
whos A M
Name Size Bytes Class Attributes
A 3x3x100000 7200000 double
M 300000x300000 16800008 double sparse
这里约为17兆字节,而7兆字节。
请注意blktridiag直接显式创建稀疏矩阵。