Fortran Coder

查看: 6769|回复: 3
打印 上一主题 下一主题

[稀疏矩阵] 如何将压缩储存的稀疏矩阵转化为满秩矩阵

[复制链接]

13

帖子

6

主题

0

精华

熟手

F 币
127 元
贡献
70 点
跳转到指定楼层
楼主
发表于 2018-6-25 22:18:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 frankgty 于 2018-6-25 23:46 编辑

现有一个稀疏矩阵以ipodia法压缩储存,数据文件中包含元素值,下标j和ipodia共三列数组。储存方式如图ipodia法所示,ipodia指向每行最后一个非零元素,此矩阵为对称矩阵,只储存了下三角。跪求大神指导如何用fortran实现将此压缩储存矩阵转化为全矩阵。求一个算法或者思路。

捕获.PNG (18.68 KB, 下载次数: 274)

ipodia法

ipodia法

Value.txt

161.6 KB, 下载次数: 5

IPODIA.txt

16.41 KB, 下载次数: 6

Index J.txt

69.26 KB, 下载次数: 5

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2018-6-26 08:28:06 | 只看该作者
[Fortran] 纯文本查看 复制代码
program fcode_cn
  Implicit None
  Real , allocatable    :: rMatrix(:,:) , value(:)
  Integer , allocatable :: ipodia(:) , indexJ(:)
  Integer :: N , M , i , j
  Open( 12 , File = "Ipodia.txt")
  Open( 13 , File = "Index J.txt")
  Open( 14 , File = "Value.txt")
  N = GetFileN( 12 )
  M = GetFileN( 13 )
  Allocate( rMatrix(N,N) , ipodia(0:N) , indexJ(M) , value(M) )
  rMatrix   = 0
  ipodia(0) = 0
  Read(12,*) ipodia(1:)
  Read(13,*) indexJ
  Read(14,*) value
  Do i = 1 , N
    rMatrix( indexJ( ipodia(i-1)+1 : ipodia(i) ) , i ) = value( ipodia(i-1)+1 : ipodia(i) )
    rMatrix( i , :i-1 ) = rMatrix( :i-1 , i )
  End Do
  Close(12)
  Close(13)
  Close(14)
  
contains

  Integer Function GetFileN( iFileUnit )
    Integer , Intent( IN ) :: iFileUnit
    character( Len = 1 ) :: cDummy
    integer :: ierr
    GetFileN = 0
    Rewind( iFileUnit )
    Do
      Read( iFileUnit , * , ioStat = ierr ) cDummy
      If( ierr /= 0 ) Exit
      GetFileN = GetFileN + 1
    End Do
    Rewind( iFileUnit )
  End Function GetFileN 
  
end program fcode_cn

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

板凳
发表于 2018-6-26 09:40:01 | 只看该作者
lz用ivf的话,直接查阅MKL帮助文档吧
譬如
https://software.intel.com/en-us ... -fortran-mkl-csrcoo

13

帖子

6

主题

0

精华

熟手

F 币
127 元
贡献
70 点
地板
 楼主| 发表于 2018-6-28 04:39:59 | 只看该作者
fcode 发表于 2018-6-26 08:28
[mw_shl_code=fortran,true]program fcode_cn
  Implicit None
  Real , allocatable    :: rMatrix(:,:) , ...

非常感谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-26 16:15

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表