在做一個算法時,需要生成一個高維的單位陣,目前維數大概是60000*60000吧,隨着處理圖像尺寸增大,單位陣的維數成平方增長。
最先嚐試用matlab中eye這個函數生成,但是在樓主4G內存的電腦上out of memory,所以只能另外想辦法。由於高維的單位陣屬於稀疏矩陣,因而想到了用sparse函數。sparse函數用於生成稀疏矩陣。
函數形式:S = sparse(i,j,s,m,n,nzmax)
參數:i-非零元的橫座標;
j-非零元的縱座標;
s-非零元的值;
i,j,s都爲向量,有 S(i(k),j(k)) = s(k);
m.n-S的維數m*n;
nzmax-非零元的數目,可缺省。
我使用sparse 生成的M*M維的單位陣程序:
i=1:M;
j=i;
s=i./i;
S=sparse(i,j,s,M,M);
補充:matlab對稀疏矩陣的運算應該是單獨處理的,利用sparse生成的單位陣計算時,比用eye生成的單位陣速度更快。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%