1. 如何存儲和計算超大規模稀疏矩陣
代碼如下:
#生成單位矩陣,用普通矩陣無法創建,所以用sparseMatrix來創建。
num_samples=180000
rownumber=c(1:num_samples)
colnumber=c(1:num_samples)
value=c(rep(1,each=num_samples))
M=sparseMatrix(rownumber,colnumber,x=value)
#給單位矩陣賦值,全部賦值完成後是一個4*50*180000個數值的對稱稀疏矩陣。
for(i in 1:num_samples){
w=W #有50個浮點型數值。
n=neighbors #有50個整型數值。
M=M-t(w)
M=M-w
M=M+w%*%t(w)
}
2. pandas可以存儲稀疏矩陣嗎
在使用pandas進行數據統計分析時,大家可能不知道如何保存groupby函數的分組結果,我的解決方案如下:
通過reset_index()函數可以將groupby()的分組結果轉換成DataFrame對象,這樣就可保存了!!
代碼舉例:
out_xlsx=in_f_name+'-group.xlsx'
df_group=df.groupby(['推廣計劃','推廣組']).describe().reset_index()
df_group.to_excel(out_xlsx, sheet_name='Sheet1',index=False)
3. 稀疏矩陣的三種存儲方式
常見的有三元組表示法、帶輔助行向量的二元組表示法(也即行邏輯鏈表的順序表),十字鏈表表示法
4. 如何建立一個稀疏矩陣並存儲
//創建稀疏矩陣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;
}
5. 稀疏矩陣的壓縮存儲方法有
稀疏矩陣的壓縮存儲,數據結構提供有 3 種具體實現方式:
三元組順序表;
行邏輯鏈接的順序表;
十字鏈表;
6. 其中A是萬階稀疏矩陣,怎麼求x,A用什麼方法存儲能
"但稀疏存儲 在進行運算時也要還原滿矩陣啊",That's not the truth.如果打算深入研究的話你可以看看
Direct methods for sparse linear systems,by Tim Davis
Iterative Methods for Sparse Linear Systems
這兩本書.
當使用 Matlab x = A\b 反斜杠操作時,如果 A 是稀疏陣,使用的針對稀疏陣的類似高斯消去法的直接求解演算法.使用這種演算法會插入一些非零元,使得存儲量增加,但不會使之成為 full matrix.
對於大型稀疏線性方程組求解,如果MATLAB提示內存不足,有兩種解決方案,1 是使用更大內存的計算機或者使用 out of core 的模式(我不清楚 matlab 是否有 out of core 的模式).2.你可以嘗試稀疏矩陣的迭代法求解,比如帶有各種預處理的 gmres,cg 等方法.matlab 自帶有 gmres 這個函數,你也可以嘗試一下.
當然,無論是直接法還是迭代法,in core 還是 out of core,32bit 的機器總有一個極限.在這個時候,你就只能採取使用 64bit 平台,然後加大內存,使用並行這些策略了.By the way,對於真正的上百萬階,千萬階的大型稀疏線性方程組來說,matlab 並不是最好的選擇,你還是應該尋求 Fortran,C 這些更高效的語言.
7. 稀疏矩陣是怎樣存儲的
就是只存儲非0值得行號列號和值的大小
8. 數據結構中怎樣給出一個 6*6 的稀疏矩陣,並將其轉化為三元組存儲
1.給出6*6的稀疏矩陣,可以初始化輸入,或者用二個for循環輸入
2.至於轉化為三元組存儲,可以定義三元組結構體,再定義三元組順序表
3.用for循環和if語句將稀疏矩陣中的數據賦予給三元組表
思路給你,自己寫比較能提升編程能力
希望我的回答能夠幫助到您,謝謝。
9. 稀疏矩陣的壓縮存儲只需要存儲什麼
非零元素。
對於一個用二維數組存儲的稀疏矩陣Amn,如果假設存儲每個數組元素需要L個位元組,那麼存儲整個矩陣需要m*n*L個位元組。但是,這些存儲空間的大部分存放的是0元素,從而造成大量的空間浪費。為了節省存儲空間,可以只存儲其中的非0元素。
(9)6萬6萬稀疏矩陣存儲擴展閱讀
稀疏矩陣演算法的最大特點是通過只存儲和處理非零元素從而大幅度降低存儲空間需求以及計算復雜度,代價則是必須使用專門的稀疏矩陣壓縮存儲數據結構。稀疏矩陣演算法是典型的不規則演算法,計算訪存比很低,並且計算過程中的訪存軌跡與稀疏矩陣的稀疏結構相關。
10. 稀疏矩陣的存儲空間
一個稀疏矩陣中有許多元素等於零,這便於矩陣的計算和保存.如果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 %存儲空間.對於許多的廣義矩陣也可這樣來作.