matlab稀疏矩陣存儲
1. 稀疏矩陣稀疏矩陣的計算機存儲
在計算機存儲中,稀疏矩陣的特性使其在處理大量元素為零的情況時顯得尤為高效。當Matlab將矩陣視為稀疏矩陣時,存儲策略發生了改變。通常,矩陣的存儲僅需關注非零元素,而非全矩陣。具體來說,這種存儲方式採用一個m×3的矩陣,其中第1列存儲行下標,第2列存儲列下標,第3列則是非零元素的值。每個非零元素佔用8個位元組(相當於高斯節),而下標則需要4個位元組。因此,對於一個包含m個非零元素的矩陣,總的內存佔用為16位元組乘以m。
以矩陣A為例,其元素為(1,0,0,0),形成一個1×1的單位矩陣,常規存儲需要8兆位元組(Mb)。然而,如果使用`sparse`命令,我們可以將其表示為一個1×3的矩陣,每行僅包含一個元素的行下標、列下標和值。這樣,存儲這個單位矩陣只需16千位元組(Kb),相比於常規存儲,節省的空間達到了99.8%。這種方法同樣適用於許多具有大量零元素的廣義矩陣,極大地節省了存儲空間。
(1)matlab稀疏矩陣存儲擴展閱讀
如果在矩陣中,多數的元素為0,稱此矩陣為稀疏矩陣(sparse matrix)。
2. 對稀疏矩陣進行壓縮存儲的目的是什麼
對稀疏矩陣進行壓縮存儲目的是節省存儲空間。
存儲矩陣的一般方法是採用二維數組,其優點是可以隨機地訪問每一個元素,因而能夠較容易地實現矩陣的各種運算。
但對於稀疏矩陣而言,若用二維數組來表示,會重復存儲了很多個0了,浪費空間,而且要花費時間來進行零元素的無效計算。所以必須考慮對稀疏矩陣進行壓縮存儲。
(2)matlab稀疏矩陣存儲擴展閱讀
優點
稀疏矩陣的計算速度更快,因為MATLAB只對非零元素進行操作,這是稀疏矩陣的一個突出的優點。假設矩陣A,B中的矩陣一樣,計算2*A需要一百萬次的浮點運算,而計算2*B只需要2000次浮點運算。
因為MATLAB不能自動創建稀疏矩陣,所以要用特殊的命令來得到稀疏矩陣。算術和邏輯運算都適用於稀疏矩陣。對於一個用二維數組存儲的稀疏矩陣Amn,如果假設存儲每個數組元素需要L個位元組,那麼存儲整個矩陣需要m*n*L個位元組。
3. 誰給詳細解釋下 matlab里的稀疏帶狀矩陣創建命令 SM=spdiags(B,d,m,n)
產生稀疏存儲矩陣
sparse可以講完全存儲方式轉換為稀疏存儲方式,那麼,當使用稀疏矩陣時,要先產生完全存儲方式的矩陣,然後再轉換,這顯然是不可取的,MATLAB有自己產生稀疏矩陣的函數spconvert:
B=spconvert(A);A為一個m*3或m*4的矩陣,A的每一列的意義分別為:
(i,1)第i非零元素所在行
(i,2)第i非零元素所在列
(i,3)第i非零元素的實部
(i,4)第i非零元素的虛部
3.帶狀(對角)稀疏矩陣
函數 spdiags
格式 [B,d] = spdiags(A) %從矩陣A中提取所有非零對角元素,這些元素保存在矩陣B中,向量d表示非零元素的對角線位置。
B = spdiags(A,d) %從空岩槐A中提取由d指定的對角線元素,並存放在B中。
A = spdiags(B,d,A) %用B中的列替換A中由d指定的對角線元素,輸出稀疏棗禪矩陣。
A = spdiags(B,d,m,n) %產斗友生一個m×n稀疏矩陣A,其元素是B中的列元素放
在由d指定的對角線位置上。
例1
>>A = [11 0 13 0
0 22 0 24
0 0 33 0
41 0 0 44
0 52 0 0
0 0 63 0
0 0 0 74];
>>[B,d] = spdiags(A)
B =
41 11 0
52 22 0
63 33 13
74 44 24
d =
-3 %表示B的第1列元素在A中主對角線下方第3條對角線上
0 %表示B的第2列在A的主對角線上
2 %表示B的第3列在A的主對角線上方第2條對角線上
例1
>> B=[1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16];
>> d=[-2 0 1 3];
>> A=spdiags(B,d,4,4);
>> full(A)
ans =
2 7 0 16
0 6 11 0
1 0 10 15
0 5 0 14