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

Matlab:创建稀疏矩阵的智能方法,matlab,memory,sparse-matrix,Matlab,Memory,Sparse Matrix,我必须创建一个比物理内存大得多的matlab矩阵,我想利用稀疏性 这个矩阵真的很稀疏(比如说NxN矩阵中的N个元素),我的ram就足够了。我以这种方式创建矩阵: A=稀疏(零(N)) 但它会被遗忘。 您知道创建此矩阵的正确方法吗?零(N)正在创建一个NxN矩阵,它不是稀疏的,因此内存不足。您的代码相当于 temp = zeros(N) A = sparse(temp) 只需执行稀疏(N,N)我实际上建议使用稀疏的完整语法([]、[]、[]、[]、N、N) 如果您知道非零元素的最大数量,则预先分

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

这个矩阵真的很稀疏(比如说NxN矩阵中的N个元素),我的ram就足够了。我以这种方式创建矩阵:

A=稀疏(零(N))

但它会被遗忘。 您知道创建此矩阵的正确方法吗?

零(N)
正在创建一个NxN矩阵,它不是稀疏的,因此内存不足。您的代码相当于

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

只需执行稀疏(N,N)

我实际上建议使用稀疏的完整语法([]、[]、[]、[]、N、N)


如果您知道非零元素的最大数量,则预先分配非常有用,否则在插入新元素时会得到实数。

创建全零稀疏矩阵,然后对其进行修改在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);

谢谢。其他人写信给我使用A=spalloc(n,n,numelements)你能评论一下“极度低效”是什么意思吗?也许还有原因?零(n)将创建一个以双精度格式存储的所有零的密集矩阵。这将消耗N*N*(8字节)的内存。然后调用稀疏(A)将从矩阵中删除所有零项。因此,您在内存中创建了一组零,然后立即删除它们。