Matlab:一种创建稀疏矩阵的智能方法

Big*_*igG 3 memory matlab sparse-matrix

我必须创建一个比我的物理记忆大得多的matlab矩阵,我想利用稀疏性.

这个矩阵实际上非常稀疏[比如NxN矩阵中的N个元素],我的ram就是这样做的.我用这种方式创建矩阵:

A =稀疏(零(N));

但它失去了记忆.你知道创建这个矩阵的正确方法吗?

YXD*_*YXD 8

zeros(N)正在创建一个非稀疏的NxN矩阵,因此你的内存不足.你的代码相当于

temp = zeros(N)
A = sparse(temp)
Run Code Online (Sandbox Code Playgroud)

做吧sparse(N,N).


cod*_*ppo 5

创建一个全零稀疏矩阵,然后修改它在matlab中是非常低效的.而不是做这样的事情:

   A = sparse(N,N)  % or even A = sparse([],[],[],N,N,N) 
   A(1:N,7) = 1:N
Run Code Online (Sandbox Code Playgroud)

以三重形式构建矩阵更有效.也就是说,首先构造列和行索引以及非零条目,然后形成矩阵.例如,

   i = 1:N;
   j = 7*ones(1,N); 
   x = 1:N;
   A = sparse(i,j,x,N,N);
Run Code Online (Sandbox Code Playgroud)