【问题标题】:Constructing Sparse Matrices,what does sparse do?构造稀疏矩阵,稀疏做什么?
【发布时间】:2014-06-06 06:01:59
【问题描述】:

让我们考虑以下矩阵

 A = [ 0   0   0   5
      0   2   0   0
      1   3   0   0
      0   0   4   0]

A =

     0     0     0     5
     0     2     0     0
     1     3     0     0
     0     0     4     0

如果我们这样做

sparse(A)

ans =

   (3,1)        1
   (2,2)        2
   (3,2)        3
   (4,3)        4
   (1,4)        5

它只显示了这些元素的非零元素和索引,但是我如何使用这些数据来构造新的向量或数组?我也想了解以下命令

S = sparse(i,j,s,m,n) 

它的定义是这样的

i 和 j 分别是矩阵的非零元素的行和列索引向量。 s 是一个非零值向量,其索引由对应的 (i,j) 对指定。 m 是结果矩阵的行维度,n 是列维度。

但是它对我们创建新数组有帮助吗?或者一般来说稀疏命令的想法是什么?我知道这是对存储的优化并且只采用非零元素,但是我们如何在进一步的计算中使用结果呢?提前谢谢

【问题讨论】:

标签: matlab sparse-matrix


【解决方案1】:

这只是存储问题,使用稀疏矩阵作为普通矩阵:

A = [ 0   0   0   5
      0   2   0   0
      1   3   0   0
      0   0   4   0];

B = [ 1   6   1   5
      6   2   0   0
      9   3   5   9
      8   7   4   0];


A = sparse(A); % Reduce memory footprint

C = B*A; % Continue thinking of matrix A as a normal matrix

D = A(:, 2); % Address elements as if A is normal matrix ...
             % i.e. D = [0 2 3 0].'

语法:

S = sparse(i,j,s,m,n);

用于直接将矩阵构造为稀疏矩阵(不临时分配普通矩阵):

n = 4; % Final row count
m = 4; % Final column count
i = [3 2 3 4 1]; % Non null rows indices
j = [1 2 2 3 4]; % Non null columns indices
s = [1 2 3 4 5]; % Non null values    
AA = sparse(i, j, s, n, m) % Same matrix as 'sparse(A)' without temporary allocation of full A

【讨论】:

  • 当(length(i)+length(j))*sizeof(int) + length(s)*sizeof(double)小于n*m*sizeof(double)时,存储变得高效
  • 另请注意,在节省内存占用的同时,在内部使用稀疏矩阵意味着在计算过程中查找返回值需要一些开销……这是一种权衡。
  • 非常感谢,但是我怎样才能使用稀疏命令后得到的矩阵呢?
  • @datodatuashvili ?? ...正如我所写,您不必担心矩阵是 sparse 矩阵(即内存优化)还是 完整 矩阵(未优化).. . 您可以像处理完整矩阵一样使用稀疏矩阵,从使用的角度来看,它对于任何操作都是严格透明的(乘法、cos、eig、绘图等...)...它在命令窗口中以索引显示的事实并不重要......如果显示打扰您(需要可视化所有内容),或者如果您想回到内存中的完整矩阵,您可以使用full(A) .
  • @Citizenlnsane 我的意思是好的,我得到了稀疏矩阵的结果,我怎样才能分别得到索引和元素?他们喜欢 [i ,j,s]=find(A) 吗?
猜你喜欢
  • 2013-11-29
  • 2018-01-19
  • 1970-01-01
  • 2012-06-20
  • 2017-03-26
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多