最近在使用matlab計算矩陣的特徵值時,遇到很大的困難,對於一個30000*30000的矩陣,特徵值計算一次需要花近三個小時,
矩陣是非常稀疏(且有一個零特徵根)的,將矩陣轉成稀疏矩陣形式後,只算最小的幾個特徵值,速度上很快,但是每次算出來的特徵值都不一樣。
不知道原因出在哪裏,可能跟矩陣有一個零特徵值有關吧。把 matlab help 文檔中的 eigs 例子運算一遍 ,結果每次都是一樣的,然而將例子中的稀疏矩陣某一行改爲全零(相應的 這時矩陣必有一個零特徵值),得到的特徵值也開始變化。所以感覺跟矩陣有零特徵根有關。
而在網上查閱資料,發現matlab 也可以調用GPU對矩陣運算進行加速。
用法如下:
1. 先在命令行 輸入,
gpuDevice
查看自己的電腦gpu的型號。
2. 將矩陣轉化爲gpuArray格式,
如:假設現在已經初始化了一個矩陣(X),
GX = gpuArray(X)
上面的命令將 X 轉化爲 gpu 可進行計算的格式, GX。
然後可以在命令行輸入:
doc gpuArray
查看這一格式對應的內置函數,選擇自己需要的函數,就可以進行計算了。