sparse用法matlab官方說明


sparse

 

創建稀疏矩陣

全頁折疊
 

說明

示例

S = sparse(A) 通過擠出任何零元素將滿矩陣轉換為稀疏格式。如果矩陣包含許多零,將矩陣轉換為稀疏存儲空間可以節省內存。

示例

S = sparse(m,n) 生成 m×n 全零稀疏矩陣。

示例

S = sparse(i,j,v) 根據 ij 和 v 三元組生成稀疏矩陣 S,以便 S(i(k),j(k)) = v(k)max(i)×max(j) 輸出矩陣為 length(v) 非零元素分配了空間。sparse 將 v 中下標重復(在i 和 j 中)的元素加到一起。

如果輸入 ij 和 v 為向量或矩陣,則它們必須具有相同數量的元素。參數 v 和/或 i 或 j 其中一個參數可以使標量。

示例

S = sparse(i,j,v,m,n) 將 S 的大小指定為 m×n

示例

S = sparse(i,j,v,m,n,nz) 為 nz 非零元素分配空間。可以使用此語法為構造后要填充的非零值分配額外空間。

 

示例

全部折疊

使用稀疏存儲空間節省內存

創建一個 10,000×10,000 的滿存儲單位矩陣。

A = eye(10000);
whos A
  Name          Size                   Bytes  Class     Attributes

  A         10000x10000            800000000  double              

此矩陣使用 800 MB 內存。

將矩陣轉換為稀疏存儲。

S = sparse(A);
whos S
  Name          Size                Bytes  Class     Attributes

  S         10000x10000            240008  double    sparse    

采用稀疏形式時,同一矩陣只使用約 0.25 MB 內存。在這種情況下,您可以使用 speye 函數來避免滿存儲,該函數可以直接創建稀疏單位矩陣。

 
 

全零稀疏矩陣

S = sparse(10000,5000)
S = 
   All zero sparse: 10000x5000

 
 

指定大小的非零稀疏矩陣

根據 ij 和 v 三元組生成 1500×1500 的稀疏矩陣。

i = [900 1000];
j = [900 1000];
v = [10 100];
S = sparse(i,j,v,1500,1500)
S = 
 (900,900)     10
(1000,1000)   100

當指定的大小大於 max(i)×max(j) 時,sparse 函數會使用額外的零值行和列填充輸出。

size(S)
ans = 1×2

        1500        1500

 
 

預分配稀疏矩陣中的存儲空間

創建一個由 10 個非零值構成的稀疏矩陣,但實際上為此矩陣分配可以存儲 100 個非零值的空間。

S = sparse(1:10,1:10,5,20,20,100);
N = nnz(S)
N = 10
N_alloc = nzmax(S)
N_alloc = 100

spalloc 函數可以快速創建由全零元素構成的稀疏矩陣,同時還會在此矩陣中為非零數數值分配一定的存儲空間。

 
 

將值累加到稀疏矩陣

使用重復的下標將值累加到單一稀疏矩陣中,如果不如此的話,可能要使用一個或多個循環。

創建一個數據列向量和兩個下標列向量。

i = [6 6 6 5 10 10 9 9]';
j = [1 1 1 2 3 3 10 10]';
v = [100 202 173 305 410 550 323 121]';

並排顯示下標和值。

[i,j,v]
ans = 8×3

     6     1   100
     6     1   202
     6     1   173
     5     2   305
    10     3   410
    10     3   550
     9    10   323
     9    10   121

使用 sparse 函數將具有相同下標的值累加。

S = sparse(i,j,v)
S = 
   (6,1)      475
   (5,2)      305
  (10,3)      960
   (9,10)     444

 
 

輸入參數

全部折疊

A - 輸入矩陣
滿矩陣 | 稀疏矩陣

輸入矩陣,指定為滿矩陣或稀疏矩陣。如果 A 已為稀疏狀態,則 sparse(A) 會返回 A

數據類型: double | logical
復數支持: 是

i,j - 下標對組(以單獨參數指定)
標量 | 向量 | 矩陣

下標對組,指定為標量、向量或矩陣的單獨參數。i 和 j 中的對應元素指定 S(i,j) 的下標對組,該對組決定 v 中的值在輸出中的放置方式。如果 i 或 j 為向量或矩陣,則另一個輸入可以是標量或者是具有相同元素數量的向量或矩陣。在這種情況下,sparse 會使用 i(:) 和 j(:) 作為下標。如果 i 和 j 在 v 中的幾個元素具有相同的值,則這些元素會加到一起。

注意

如果 i 或 j 中的任何值大於 2^31-1(對於 32 位平台)或 2^48-1(64 位平台),則無法構造稀疏矩陣。

數據類型: double | logical

v - 
標量 | 向量 | 矩陣

值,指定為標量、向量或矩陣。如果 v 是向量或矩陣,則 i 或 j 的其中一個輸入必須也是具有相同數量的元素的向量或矩陣。

v 中的任何零值元素都會被忽略,因為它們是 i 和 j 的對應下標。但是,如果您不指定輸出的維度大小 m 和 n,則 sparse 在忽略 v 中的任何零值元素之前,會先計算最大值 m = max(i) 和 n = max(j)

數據類型: double | logical
復數支持: 是

m,n - 每個維度的大小(作為單獨參數)
整數值

每個維度的大小,指定為包含整數值的單獨參數。如果指定 m(行大小),則必須也指定 n(列大小)。

如果不指定 m 和 n,則 sparse 將使用默認值 m = max(i) 和 n = max(j)。這些最大值在刪除 v 中的任何零之前進行計算。

數據類型: double

nz - 非零元素的存儲空間分配
非負整數

非零元素的存儲空間分配,指定為非負整數。nz 通常必須大於或等於 max([numel(i), numel(j), numel(v), 1])。但是,如果 ij 和 v 的大小允許您為 nz 指定值 0,則 sparse 會將該值設置為 1

對於稀疏矩陣 Snnz 函數返回矩陣中非零元素的數目,nzmax 函數返回為非零矩陣元素分配的空間量。如果 nnz(S) 和 nzmax(S) 返回不同的結果,則可能需要分配比實際需求更大的空間。鑒於此原因,請預先設置 nz,再進行填充。

如果您不指定 nz,則 sparse 使用默認值 max([numel(i), numel(j), numel(v), 1])

數據類型: double

原文鏈接   https://ww2.mathworks.cn/help/matlab/ref/sparse.html

提示

  • MATLAB® 以壓縮稀疏列格式存儲稀疏矩陣。有關詳細信息,請參閱 John R. Gilbert、Cleve Moler 和 Robert Schreiber 合著的 Sparse Matrices In MATLAB:Design and Implementation

  • accumarray 函數具有與 sparse 類似的累加行為。

    • accumarray 使用 n 維下標將數據分組到 bin 中,而 sparse 使用二維下標將數據分組到 bin 中。

    • 默認情況下,accumarray 會將具有相同下標的元素添加到輸出中,但您可以選擇將任何函數應用於 bin。sparse 只會將具有相同下標的元素添加到輸出中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM