大型稀疏矩阵的一维存储及其乘法运算

大型稀疏矩阵因其大部分元素为0,导致存储和运算效率低下。通过采用一维数组A(k), JA(k), NA(n)的数据结构,可以筛选并存储非零元素,提高存储效率。在该方法中,A(k)存储非零元素,JA(k)记录其所在行,NA(n)记录每行非零元素数量。结合示例的Fortran代码,展示了如何进行稀疏矩阵与向量的乘法运算。" 41775667,4887867,C++实现图的基本算法:强连通分量,"['图算法', '数据结构', 'C++编程', '深度优先搜索', '图论']
摘要由CSDN通过智能技术生成

大型稀疏矩阵对存储和CPU要求高,很多集成化软件对于特大型矩阵的运算束手无策,因此需要一种优良的数据结构筛除稀疏矩阵中的0,从而实现数据的高效存储和运算。

对于m行n列的大型稀疏矩阵A(large sparse matrix),它大多数元素都为0,则可以使用三个一维数组存储该矩阵:A(k),JA(k),NA(n).每个数据的含义:
**A(k):**若A共有m*n个元素,其中有k个非零元素,每个非零元素按行存储,A(i)为第i个非零元素。
**JA(k):**与数组A一样,有k个元素;JA(i)代表第i个非零元素在矩阵A的第JA(i)行。
**NA(n):**共n个元素,NA(i)代表矩阵A的第i行有NA(i)个非零元素。
用图片表示更加直观:
A = [ 0 a 12 a 13 … 0 a 21 a 22 0 … 0 ⋮ ⋮ 0 0 0 … a m n ] N A ( 1 ) = 2 N A ( 2 ) = 2 ⋮ N A ( n ) = 1 l =    ∣    l 1 . . . l 2      ∣      l 1 . . l 2    ∣    . . .    ∣    l 1 l 2 ∣ A = [ a 12 , a 13 , a 21 , a 22 , . . . , a m n ] J A = [ 2 ,        3 ,        1

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
稀疏矩阵的CSC(Compressed Sparse Column)存储方式是一种压缩列存储方式,它将所有的非零元素按列压缩存储,每一列的非零元素都存储在一个连续的数组中,同时记录每一列的非零元素在该列中的起始位置和终止位置。 具体地,CSC格式包含三个数组:data、indices和indptr。 - data:是一个一维数组,存储所有的非零元素,按列压缩存储,从左到右,从上到下,每列的非零元素按行顺序存储; - indices:是一个一维数组,存储所有非零元素的行索引,按列压缩存储,从左到右,从上到下,每列的非零元素按行顺序存储; - indptr:是一个一维数组,存储每一列的第一个非零元素在data和indices中的位置,以及最后一个非零元素的下一个位置,也就是说,indptr[k+1]-indptr[k]就是第k列的非零元素个数。 以一个例子来说明CSC格式的存储方式。给定一个3×3的矩阵: ``` 1 0 0 0 0 2 0 3 0 ``` 将其用CSC格式存储,得到以下三个数组: ``` data = [1, 3, 2] indices = [0, 2, 1] indptr = [0, 1, 3, 3] ``` 其中,data、indices和indptr分别表示非零元素的值、行索引和列指针。例如,data中的第一个元素1表示第一列的第一个非零元素的值,indices中的第一个元素0表示第一列的第一个非零元素在原矩阵中的行索引,indptr中的第一个元素0表示第一列的第一个非零元素在data和indices中的起始位置,最后一个元素3表示最后一列的最后一个非零元素的下一个位置。 CSC格式的存储方式在矩阵乘法和其他矩阵运算中具有很好的性质,例如,可以高效地进行矩阵乘法矩阵转置、矩阵向量乘法运算。同时,CSC格式也是SciPy中的稀疏矩阵存储和计算的默认格式之一,对于大规模矩阵的处理具有非常重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值