許春榮 買買提依明·哈斯木
【摘? 要】 矩陣在數(shù)據(jù)存儲、機器學習、圖像處理、自然語言處理中有著廣泛的應用。稀疏矩陣是指矩陣中非零元素的個數(shù)較少的類型。數(shù)據(jù)結構這門課程作為高校計算機基礎的一門課程,主要介紹的是計算機科學中用于組織和管理數(shù)據(jù)的方法和技術,其中包括介紹稀疏矩陣的內(nèi)容。目前,一些教材在數(shù)據(jù)數(shù)組存儲介紹上,對稀疏矩陣這個章節(jié)內(nèi)容講解較少,僅為理論內(nèi)容,有些具體應用沒有敘述清楚,容易使學生理解不深。為此,文章介紹具體案例,講解稀疏矩陣的存儲特點以及在計算效率上的優(yōu)越性,讓學生更好地理解稀疏矩陣,也更好地掌握數(shù)據(jù)結構這門課的內(nèi)涵。
【關鍵詞】 數(shù)據(jù)結構;稀疏矩陣;計算效率
數(shù)據(jù)結構是高等學校大部分理工類專業(yè)本科學生在學校必須完成的基礎課程。數(shù)據(jù)結構課程主要介紹的是計算機科學中用于組織和管理數(shù)據(jù)的方法和技術。它涉及存儲、組織、操作和檢索數(shù)據(jù)的不同數(shù)據(jù)結構和算法的設計和分析。通過學習數(shù)據(jù)結構課程,學生可以培養(yǎng)良好的問題分析與解決能力,提高程序設計和算法實現(xiàn)的效率,為進一步學習計算機科學的相關課程打下堅實的基礎。學生對該課程的掌握情況將影響到后續(xù)專業(yè)課程的學習及邏輯思維方式和程序設計思想的建立。在數(shù)據(jù)結構中,數(shù)組的存儲是重要的內(nèi)容,其中包括特殊矩陣——稀疏矩陣存儲。
目前,一些教材在數(shù)據(jù)數(shù)組存儲介紹上對稀疏矩陣這個章節(jié)內(nèi)容講解較少,主要介紹稀疏矩陣的壓縮存儲方式,一些具體應用沒有敘述清楚,容易使學生理解不深,為此,需要在教學中對稀疏矩陣加以介紹,適當?shù)丶右恍┯嬎銠C案例教學,設計案例講解稀疏矩陣的概念。本研究將通過一些例題實驗對稀疏矩陣在存儲和計算上進行介紹,并和一般稠密型矩陣進行比較,對比介紹稀疏矩陣的特點和優(yōu)越性。
一、稀疏矩陣
稀疏矩陣在數(shù)據(jù)存儲、機器學習、圖像處理、自然語言處理以及工程上有著廣泛的應用。稀疏矩陣是指在一個二維矩陣中,絕大部分元素都是零的矩陣。與稠密矩陣(大部分元素非零)相比,稀疏矩陣的特點是具有較少的非零元素,占據(jù)整個矩陣的很小一部分(一般小于5%)。稀疏矩陣的應用方面有很多,包括在線性代數(shù)上,如矩陣運算、求解線性方程組、特征值計算等。
在圖論和網(wǎng)絡分析中,稀疏矩陣常用于表示圖結構、網(wǎng)絡連接等。在自然語言處理中,稀疏矩陣常用于文本特征表示和文本分類任務。在圖像處理中,稀疏矩陣常用于壓縮和圖像恢復任務。例如壓縮感知技術利用稀疏矩陣表示圖像,可以實現(xiàn)高效的圖像壓縮和重建。常見的稀疏矩陣有帶型陣,塊三角,塊對角陣,單面鑲邊的帶型陣,雙面鑲邊的帶型陣等。由于稀疏矩陣它的特點,可以從存儲上對矩陣的運算做一些描述,以便更好理解稀疏矩陣。
已有較多學者對稀疏矩陣的存儲進行研究,焦點在于設計合適的存儲結構,并在此基礎上進行高效的稀疏矩陣運算。
存儲矩陣的一般方法是采用二維數(shù)組,其優(yōu)點是可以隨機訪問每一個元素,因而能夠?qū)崿F(xiàn)矩陣的各種運算。但對稀疏矩陣而言,會重復存儲多個無效元素,這浪費了內(nèi)存空間,而且不方便查看有效數(shù)據(jù)的位置,花費大量時間來進行行列元素的無效計算。所以必須考慮對稀疏矩陣進行壓縮存儲。稀疏矩陣的壓縮存儲方式有多種,主要有以下幾種:
1. COO(Coordinate)格式。COO格式使用三個數(shù)組分別存儲非零元素的行坐標、列坐標和對應的數(shù)值。
2. CSR(Compressed Sparse Row)格式。CSR格式是常用的稀疏矩陣存儲壓縮格式。CSR格式使用三個數(shù)組分別存儲非零元素的數(shù)值、列索引和行指針。行指針數(shù)組記錄每行第一個非零元素在數(shù)值數(shù)組中的位置索引。這種格式適用于按行訪問稀疏矩陣的情況,可以高效地存儲和計算稀疏矩陣。
3. CSC(Compressed Sparse Column)格式。這種格式和CSR相同,只是矩陣元按列壓縮存儲,CSC使用三個數(shù)組分別存儲非零元素的數(shù)值、行索引和列指針。列指針數(shù)組記錄每列第一個非零元素在數(shù)值數(shù)組中的索引位置。這種格式適用于按列訪問稀疏矩陣的情況。
4. DOK(Dictionary of Keys)格式。DOK格式使用一個字典(鍵—值對)來存儲非零元素的位置和數(shù)值。字典的鍵表示元素的行列索引,值表示對應的數(shù)值。這種格式適用于動態(tài)稀疏矩陣或矩陣結構頻繁變化的情況。
5. BSR(Block Compressed Sparse Row)格式。BSR格式將稀疏矩陣分為固定大小的塊,并對每個塊存儲非零元素的數(shù)值、列索引和塊指針。這種格式適用于擁有塊結構的稀疏矩陣。
不同的稀疏矩陣表示形式具有不同的優(yōu)勢和適用場景。選擇合適的表示形式可以最大限度減少存儲空間的使用和提高矩陣操作的效率。本文主要采用第一種存儲方式COO(Coordinate)格式進行存儲。COO使用三個數(shù)組分別存儲非零元素的行坐標、列坐標和對應的數(shù)值,是一種三元組順序表壓縮存儲方式。當一個數(shù)組中大部分元素為0,或者為同一個值的數(shù)組值,可以使用三元組順序表來保存該數(shù)組。稀疏數(shù)組的處理方法是把具有非零值的元素的行列記錄在一個三元組的順序表中,每個數(shù)據(jù)元素都是以三元組的方式組成的,即(i,j,aij),其中i表示行,j表示列,aij表示元素。利用三元組存儲,可以減少存儲空間,這樣矩陣以小規(guī)模的數(shù)組存儲,從而縮小程序的規(guī)模。
二、稀疏矩陣的案例設計
稀疏矩陣是一種特殊的矩陣,由于跟一般矩陣有著不同的特點,學生的學習理解比較淺層,為了讓學生能在學習中對稀疏矩陣有更好的理解,教師可通過設計一些案例進行講解,讓學生理解更透徹。案例設計主要包括稀疏矩陣的存儲以及計算效率的特點介紹。
(一)稀疏矩陣的存儲特點
例1:設A為一個200*200的單位矩陣。
其稀疏程度如圖1所示。
此時A為稀疏矩陣,利用稀疏數(shù)組形式存儲,即利用三元組順序存儲,如表1。
查看兩個矩陣的存儲空間,原矩陣存儲,稀疏矩陣數(shù)組存儲空間大小對比如表2所示。
從結果可以看出,以稀疏矩陣三元組順序表存儲,存儲空間為4808bit,以一般矩陣形式存儲為320000bit,以一般矩陣存儲占用的空間是以三元組順序表存儲空間的66倍,可見,稀疏矩陣采用三元組順序表存儲的方法可以大大節(jié)省存儲空間。
(二)稀疏矩陣在計算上的特點
稀疏矩陣在加法、乘法上以及一些特征值的計算有著更高的效率。下文通過案例介紹。
例2:求解稀疏矩陣的特征值,A為1000*1000的矩陣,除了三條對角線為1外,其余都為0,這里對A矩陣求特征向量值,再用稀疏矩陣數(shù)組形式求解特征值。
利用Matlab編程運算,得到運行結果,從運行結果可以看出,利用原矩陣和稀疏數(shù)組形式計算出來特征值一樣,而在計算時間上,一般形式矩陣計算為0.0115s,利用稀疏矩陣求解特征值為0.0115s,這說明采用稀疏數(shù)組的形式計算特征值速度也會更快,更加節(jié)省時間。稀疏矩陣在逆矩陣的求解上也具有較快的速度,如例3。
例3:設A矩陣為可逆稀疏矩陣,采用稀疏數(shù)組方式進行求逆,并與一般形式矩陣形式求逆矩陣做對比。
利用Matlab運算,得到運行結果,從結果看出,若矩陣A為稀疏矩陣,采用稀疏數(shù)組形式以及一般形式矩陣,對其齊求逆矩陣,求得的解都一樣,而其求解的速度原矩陣計算時間為0.0183s,稀疏數(shù)組計算需要的時間為4.7550e-04s,用稀疏數(shù)組計算逆矩陣速度要快于一般形式矩陣求解逆矩陣,可見稀疏數(shù)組在求解上有更高的效率,還可以應用一些數(shù)學知識求解。另外,在求解方程組時,稀疏矩陣在計算上效率也更高,如例4。
例4:設A矩陣為三對角矩陣,Ax=b;采用稀疏數(shù)組方式進行求逆,并與一般形式矩陣求解方程組做對比。
利用Matlab運算,得到運行結果。從運行結果可以看出,利用一般形式矩陣和稀疏矩陣形式計算出來方程組的解是一樣的,而在計算時間上,一般形式矩陣計算為0.0780s,利用稀疏數(shù)組求解特征值為7.0070e-04s,可見用稀疏數(shù)組的形式計求解方程組速度會更快,效率更高。
三、結語
稀疏矩陣作為一種特殊矩陣,在數(shù)學上、工程上有較好的運用,本研究通過列舉案例介紹稀疏矩陣的存儲和計算,對稀疏矩陣的介紹進一步補充說明,可以較好地理解稀疏矩陣的稀疏數(shù)組形式與一般矩陣形式在存儲上和計算上的區(qū)別。從例子的結果可以看出,稀疏矩陣數(shù)組形式在存儲上可以較地好降低存儲空間,而在計算上,包括稀疏矩陣的特征值,逆矩陣的計算以及求解方程組上都有較高的效率。通過這樣的例子,學生可以對教材中稀疏矩陣有更好的理解。由于稀疏矩陣的特點,在工程上,比如機器學習,圖像處理,文本分類上,如果矩陣為稀疏矩陣,那么可以采用稀疏矩陣數(shù)組形式進行存儲和計算,從而減小存儲空間,提高處理效率。稀疏矩陣在存儲和計算上具有優(yōu)越的特點,如果是非稀疏矩陣,即矩陣在高數(shù)據(jù)密度(50%以上)下,一個完整的矩陣總是比一個稀疏的矩陣快,所以教學時要根據(jù)矩陣的具體特點,做相應的處理,以更好地提高效率。
參考文獻:
[1] 嚴蔚敏,李冬梅. 數(shù)據(jù)結構(C語言版)(第2版)[M]. 北京:人民郵電出版社,2021.
[2] 李向華,王震,高超. 面向數(shù)據(jù)結構的“C程序設計”教學改進策略[J]. 西南師范大學學報(自然科學版),2023,48(05):111-115.
[3] 曹中瀟,馮仰德,王玨,等. 基于深度學習的稀疏矩陣向量乘運算性能預測模型[J]. 計算機工程,2022,48(02):86-91.
[4] 李佳佳,張秀霞,譚光明,等. 選擇稀疏矩陣乘法最優(yōu)存儲格式的研究[J]. 計算機研究與發(fā)展,2014,51(04):882-894.
[5] 張玉州. “數(shù)據(jù)結構”課程中稀疏矩陣運算器的實現(xiàn)[J]. 安慶師范大學學報(自然科學版),2017,23(01):98-101.
[6] 薛紅濤,丁殿勇,李汭鋮,等. 基于分量加權重構和稀疏NMF的輪轂電機軸承復合故障特征提取方法[J]. 機械工程學報,2023,59(09):146-156.
[7] 楊凡,饒雨泰. 基于雙向稀疏的多視圖子空間學習算法[J]. 計算機應用與軟件,2023,40(06):266-275.
[8] 包世鵬,宋旭明,唐冕. 基于向量化的BESO方法靈敏度過濾快速算法[J]. 鐵道科學與工程學報,2023,20(05):1810-1820.
[9] 鄭慧敏,鄭明潔,張振寧,等. 基于低秩和一維稀疏矩陣分解的多通道SAR-GMTI方法[J]. 中國科學院大學學報,2022,39(02):208-216.
[10] 顧越,趙銀亮. 基于RISC-V向量指令的稀疏矩陣向量乘法實現(xiàn)與優(yōu)化[J]. 計算機工程與科學,2022,44(01):1-8.