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 %存储空间.对于许多的广义矩阵也可这样来作.