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

时间:2011-05-25 11:44:48

标签: matlab memory sparse-matrix

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

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

A =稀疏(零(N));

但内存不足。 你知道创建这个矩阵的正确方法吗?

3 个答案:

答案 0 :(得分:8)

zeros(N)正在创建一个非稀疏的NxN矩阵,因此您的内存不足。您的代码等同于

temp = zeros(N)
A = sparse(temp)

只需sparse(N,N)

答案 1 :(得分:5)

创建全零稀疏矩阵,然后在matlab中修改它是非常低效的。 而不是做类似的事情:

   A = sparse(N,N)  % or even A = sparse([],[],[],N,N,N) 
   A(1:N,7) = 1:N

以三重形式构建矩阵更有效。那是, 首先构造列和行索引以及非零条目 形成矩阵。例如,

   i = 1:N;
   j = 7*ones(1,N); 
   x = 1:N;
   A = sparse(i,j,x,N,N);

答案 2 :(得分:3)

我实际上推荐稀疏([],[],[],N,N,N)的完整语法。

如果您知道非零元素的最大数量,则预分配是有用的,否则在插入新元素时将获得realloc。