sparse

sparse

sparse是matlab中用來產生稀疏矩陣的函式,把以第一種存儲形式存儲的稀疏矩陣轉換成第二種形式存儲。對應的函式為full,即把以第二種方式存儲的稀疏矩陣轉換成第一種方式存儲。

函式簡介

函式功能:

這個函式與稀疏矩陣有關。

先說MATLAB中兩個概念:full storage organization(對應於full matrix)和sparse storage organization(對應於sparse matrix)。

而要說明這兩個概念,需要介紹稀疏矩陣的概念。

一般意義上的稀疏矩陣,就是看起來很鬆散的,也就是說,在這個矩陣中,絕大多數元素是零元素。例如:

0, 0, 0, 0;

0, 0, 1, 0;

0, 0, 0, 0;

0, 1, 0, 2;

計算機存儲稀疏矩陣可以有兩種思路:

1.按照存儲一個普通矩陣一樣存儲一個稀疏矩陣,比如上面這個稀疏矩陣中總共十六個元素(三個非零元素),把這些元素全部放入存儲空間中。這種存儲方式,在matlab就叫做full storage organization。

2.只存儲非零元素,那么怎么存儲呢?

(4,2) 1

(2,3) 1

(4,4) 2

看出來了吧, 只存儲非零元素在稀疏矩陣中的位置和值。比如,上面所舉的這個例子,值為2的項在第4行第4列,那么我們就只需要存儲這一非零項在稀疏矩陣中的“坐標”(4,4)和這一非零項的值2。在MATLAB中,這種存儲方式就叫做sparse storage organization。雖然,這樣要多存儲一組坐標,但如果稀疏矩陣中非零元素非常少,以這種存儲方式存儲稀疏矩陣反而節省了記憶體空間。

為什麼matlab中會同時存在這兩種存儲方式呢?

第一種方式, 進行矩陣運算時(比如稀疏矩陣的乘法),算法簡單易實現,程式運行的快。

而第二種方式,雖然有時可以節省存儲數據時占用的存儲空間,但進行運算時需要專門的算法實現,因此運行起來也要更耗時。

sparse函式的功能就是

在MATLAB中,存儲一個稀疏矩陣有兩種方法。

語法格式:

1.S = sparse(A)

2.S = sparse(i,j,s,m,n,nzmax)

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

4.S = sparse(i,j,s)

5.S = sparse(m,n)

相關函式:full、issparse

程式示例

1.>> A = [0, 0, 0, 0;

0, 0, 1, 0;

0, 0, 0, 0;

0, 1, 0, 2];

>> sparse(A)

ans =

(4,2) 1

(2,3) 1

(4,4) 2

2.S = sparse(i,j,s,m,n,nzmax)

由向量i,j,s 生成一個m*n,且最多含有nzmax個元素的稀疏矩陣。

sparse([1,2,3,4],[1,2,3,4],[0,0,1,1],5,5,6)

ans =

(3,3) 1

(4,4) 1

其中i=[1,2,3,4],對應要形成矩陣的行位置;

J=[1,2,3,4],對應要形成矩陣的列位置;

S=[0,0,1,1],對應要形成矩陣對應位置的值。

i 和j 的位置為一一對應,即(1,1)(2,2)(3,3)(4,4),將s中的值賦給這四個坐標的位置。

若i=[2,1,3,4],j=[3,2,4,1],則形成的坐標為(2,3)(1,2)(3,4),(4,1) )

(m>=max(i),n>=max(j) , m和n的值可以在滿足條件的範圍內任意選取. nzmax>=max(i or j) )

下面為一些簡化的情況

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

用 nzmax = length(s) ;

4.S = sparse(i,j,s)

使m = max(i) 和 n = max(j),在s中零元素被移除前計算最大值,[i j s]中其中一行可能為[m n 0];

5.S = sparse(m,n)

sparse([],[],[],m,n,0)的縮寫,生成一個m*n的所有元素都是0的稀疏矩陣。

相關詞條

相關搜尋

熱門詞條

聯絡我們