當前位置:首頁 » 服務存儲 » 稀疏變數存儲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

稀疏變數存儲

發布時間: 2023-03-29 00:03:15

『壹』 稀疏矩陣的存儲空間

一個稀疏矩陣中有許多元素等於零,這便於矩陣的計算和保存.如果Matlab把一個矩陣當作稀疏矩陣,那麼只需在m×3的矩陣中存儲m個非零項.第1列是行下標,第2列是列下標,第3列是非零元素值,不必保存零元素.如果存儲一個浮點數要8個位元組,存儲每個下標要4個位元組,那麼整個矩陣在內存中存儲需要1 6×m個位元組.
A = e y e ( 1 0 0 0 ) ;
得到一個1 0 0 0×1 0 0 0的單位矩陣,存儲它需要8 MB空間.如果使用命令:
B = s p e y e ( 1 0 0 0 ) ;
用一個1 0 0 0×3的矩陣來代表,每行包含有一個行下標,列下標和元素本身.只需1 6 K B的空間就可以存儲1 0 0 0×1 0 0 0的單位矩陣,它只需要滿單位矩陣的0 . 2 %存儲空間.對於許多的廣義矩陣也可這樣來作.

『貳』 對稀疏矩陣進行壓縮存儲的目的是什麼

對稀疏矩陣進行壓縮存儲目的是節省存儲空間。

存儲矩陣的一般方法是採用二維數組,其優點是可以隨機地訪問每一個元素,因而能夠較容易地實現矩陣的各種運算。

但對於稀疏矩陣而言,若用二維數組來表示,會重復存儲了很多個0了,浪費空間,而且要花費時間來進行零元素的無效計算。所以必須考慮對稀疏矩陣進行壓縮存儲。



(2)稀疏變數存儲擴展閱讀

優點

稀疏矩陣的計算速度更快,因為MATLAB只對非零元素進行操作,這是稀疏矩陣的一個突出的優點。假設矩陣A,B中的矩陣一樣,計算2*A需要一百萬次的浮點運算,而計算2*B只需要2000次浮點運算。

因為MATLAB不能自動創建稀疏矩陣,所以要用特殊的命令來得到稀疏矩陣。算術和邏輯運算都適用於稀疏矩陣。對於一個用二維數組存儲的稀疏矩陣Amn,如果假設存儲每個數組元素需要L個位元組,那麼存儲整個矩陣需要m*n*L個位元組。

『叄』 如何建立一個稀疏矩陣並存儲

//創建稀疏矩陣M
Status CreateSMatrix(TSMatrix * M)
{
int i,m,n;
ElemType e;
Status k;
printf("請輸入矩陣的行數,列數,非零元素數:");
scanf("%d,%d,%d",&(* M).mu,&(* M).nu,&(* M).tu);
if ((* M).tu > MAX_SIZE)
{
return ERROR;
}
(* M).data[0].i = 0;
for (i=1;i<=(* M).tu; ++i)
{
do
{
printf("請按行序順序輸入第%d個非零元素所在的行(1-%d),列(1-%d),元素值:",i,(* M).mu,(* M).nu);
scanf("%d,%d,%d",&m,&n,&e);
k = 0;
if (m<1 || m>(* M).mu || n<1 || n>(* M).nu)//行或列超出范圍
{
k = 1;
}
if (m<(* M).data[i-1].i || m==(* M).data[i-1].i && n<=(* M).data[i-1].j)//行或列的順序有錯
{
k = 1;
}
}while (k);
(* M).data[i].i = m;
(* M).data[i].j = n;
(* M).data[i].e = e;
}
return OK;
}

『肆』 對稀疏矩陣進行壓縮存儲目的是() A.便於進行矩陣運算 B.便於輸入和輸出 C.節省存儲空間 D.降低運

對稀疏矩陣進行壓縮存儲目的是節省存儲空間。

稀疏矩陣的存儲方式:

存儲矩陣的一般方法是採用二維數組,其優點是可以隨機地訪問每一個元素,因而能夠較容易地實現矩陣的各種帶歲運算。但對於稀疏矩陣而言,若用二維數組來表示,會重復存儲了很多個0了,浪費空間,而且要花費時間來進行零元素的無效計算。所以必須考慮對稀疏矩陣進行壓縮悉行笑存儲。

(4)稀疏變數存儲擴展閱讀:

最常用的稀疏矩陣睜含存儲格式主要有:三元組(i,j,a(i,j))和CSR(Compressed Sparse Row)。

(1) 三元組(i,j,a(i,j))(也叫COO(Coordinate Format))

三元組(i,j,a(i,j))很簡單,就是使用3個數組,分別存儲全部非零元的行下標(row index)、列下標(column index)和值(value)

(2) CSR存儲(Compressed Sparse Row,壓縮稀疏的行)

CSR是比較標準的一種,也需要三類數據來表達:數值,列號,以及行偏移。數值和列號與COO一致,表示一個元素以及其列號,行偏移表示某一行的第一個元素在values裡面的起始偏移位置。

『伍』 稀疏矩陣的壓縮存儲思想

為了節省存儲空間並且加快處理速度,需要對這類矩陣進行壓縮存儲,壓縮存儲的原則是:不重復存儲相同元素;不存儲零值元素。稀疏矩陣,有三元組表示法、帶輔助行向量的二元組表示法(也即行邏輯鏈表的順序表),十字鏈表表示法等。演算法基本思想:num[col]:第col列的非零元素個數;cpot[col]:第col列第一個非零元在b.data中的恰當位置;在轉置過程中,指示該列下一個非零元在b.data中的位置。

『陸』 數據結構 稀疏矩陣一般的壓縮存儲方法有哪幾種

來自 嚴蔚敏《數據結構》
稀疏矩陣的壓縮方法主要有:
1:三元組順序表 (行下標,列下標,值)
2:行邏輯鏈接的順序表。
3:十字鏈表。

『柒』 稀疏矩陣一般的壓縮存儲方法有兩種

分別是三元組和十字鏈表。

三元組是指形如((x,y),z)的集合(這就是說,三元組是這樣的偶,其第一個射影亦是一個偶),常簡記為(x,y,z)。

三元組是計算機專業的一門公共基礎課程——數據結構里的概念。主要是用來存儲稀疏矩陣的一種壓縮方式,也叫三元組表。假設以順序存儲結構來表示三元組表(triple table),則得到稀疏矩陣的一種壓縮存儲方式,即三元組順序表,簡稱三元組表。

十字鏈表(Orthogonal List)是有向圖的另一種鏈式存儲結構。該結構可以看成是將有向圖的鄰接表和逆鄰接表結合起來得到的。用十字鏈表來存儲有向圖,可以達到高效的存取效果。同時,代碼的可讀性也會得到提升。

拓展資料:

十字鏈表(Orthogonal List)是有向圖的另一種鏈式存儲結構。可以看成是將有向圖的鄰接表和逆鄰接表結合起來得到的一種鏈表。在十字鏈表中,對應於有向圖中每一條弧都有一個結點,對應於每個定頂點也有一個結點。

十字鏈表之於有向圖,類似於鄰接表之於無向圖。

也可以理解為 將行的單鏈表和列的單鏈表結合起來存儲稀疏矩陣稱為十字鏈表, 每個節點表示一個非零元素。

三元組解釋:

1、所謂「三元組」是指圖形的幾何元素構成、圖線間的拓撲關系和尺寸約束。如果一組圖形的前二元相同而只是尺寸大小不同,則這組圖形構成一族形狀相同的系列化圖形。

2、把組成一個元素的三個數稱為三元組。一個三元組包含以下三部分的內容SDO_STARTING_OFFSET表明每個幾何元素的第一個坐標在SDO_ORDINATES數組中的存儲位置。

3、…Mt:N2)的表示稱為三元組...…Mt稱為標號,N1、N2為結點R為關系。當n≠0時,稱Li為對結點N1的修飾。t≠0時,稱Mj為對結點N2的修飾。

參考資料:網路:十字鏈表

網路:三元組

『捌』 稀疏矩陣定義以及存儲格式(COO,CSR,CSC)

網路:在矩陣中,若數值為0的元素數目遠遠多於非0元素的數目,並且非0元素分布沒有規律時,則稱該矩陣為稀疏矩陣;與之相反,若非0元素數目佔大多數時,則稱該矩陣為稠密矩陣。定義非零元素的總數比上矩陣所有元素的總數為矩陣的稠密度。 簡單來說,稀疏矩陣就是絕大部分都是0的矩陣 ,只包含很少的非零值.

比如,

上述稀疏矩陣非零元素有9個,26個零值.稀疏性是74%.

稀疏矩陣因為絕大部分都是0元素,如果我們仍然按照普通方式存儲,無疑會 浪費很多空間 ;同時如果進行運算時,0元素對最終結果也沒有幫助, 增加了許多無效計算 . 因此,我們需要設計出新的存儲方式,或者說數據結構來存儲稀疏矩陣.比較常見的有:

對於稀疏矩陣的存儲,為了達到壓縮的目的(節省存儲空間),只存儲非0元素值,但是也要保留非零元素的位置,方便恢復.所以,我們存儲時不僅存儲非零元素值,同時存儲其坐標位置(row,column). 針對這兩者的存儲,會出現不同的設計方案.這里主要介紹COO,CSR和CSC存儲格式.

我們使用三個數組row,column和data分別用來存儲非零元素坐標的row_index,col_index,以及數值.比如:

NNO:The number of nonzero.矩陣非零元素個數. 三個數組的長度都是NNO.data[i]在原稀疏矩陣中的坐標為(row[i],col[i]]).

可以發現,這種存儲方式中,row數組和column數組中有一定的重復元素.我們是否可以針對這個冗餘特性進一步進行壓縮?之後出現CSR,CSC,分別是對row數組和column數組進行了壓縮.

對COO稀疏矩陣存儲格式的三個數組中的row數組進行壓縮.其他兩個數組保持不變;三個數組分別是row_ptr,columns和data.其中columns和data數組長度均為NNO(矩陣的非零元素個數). 如何對COO的row進行壓縮?

row_ptr存儲的是每行的第一個非零元素距離稀疏矩陣第一個元素的偏移位置;

由row_ptr我們可以知道每行非零元素在data中的index范圍.第i行的非零元素為data[row_ptr[i]:row_ptr[i+1]],對data數組的切片,不包含data[row_ptr[i+1]];同時第i行非零元素的col坐標分別為columns[row_ptr[i]:row_ptr[i+1]];對data和columns的訪問相似,index是相同的.

如上圖中,第0行非零元素在data中是data[0:2],就是1,7;列坐標為columns[0:2],就是0,1,第1行非零元素為data[2:4],有兩個元素2和8,列坐標分別為columns[2:4],1和2.

方便進行行操作.

和CSR類似.只不過對列進行壓縮,row和data保持不變.

方便進行列操作.

『玖』 怎樣用c語言實現稀疏矩陣的帶行指針向量的鏈接儲存

double fMatrix[10][10]={...};
這是靜態數組表示矩陣,當然你可以使用鏈表的方式來存儲
一個鏈表表示一行,每行存儲鏈表的頭元素指針就行。。。

『拾』 對稀疏矩陣進行壓縮存儲的缺點

對稀疏矩陣進行壓縮存儲的缺點失去隨機存儲功含緩能。稀疏矩陣壓縮存儲後,必會失去隨機存取功能。稀疏矩陣在採用壓縮存儲後將會失去隨機存儲的功粗皮能。在這種矩陣中,非零元素的分布是沒有規律的,為了壓縮存儲,就將每一個非零元素的值和所在的行、列號做為一個結點存放在一起,結點組成的線性表中岩老差叫三元組表,已不是簡單的向量,無法用下標直接存取矩陣中的元素。