Fortran Coder

查看: 3402|回复: 7
打印 上一主题 下一主题

[求助] Fortran如何合并具有相同的性质的两列,并删除列

[复制链接]

4

帖子

2

主题

0

精华

新人

F 币
23 元
贡献
10 点
跳转到指定楼层
楼主
发表于 2022-7-22 16:00:16 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jiangweiwu 于 2022-7-23 13:14 编辑

现在已知一个矩阵中所有的非零元素的行列值(u,v,a),但是这些行值与列值有重复的,如何将重复行列处的值相加,只保留一列,其余列都删除呢?

可以参见上传的图片,需要将两个圆圈处的a值相加,保留一个圈中的所有内容,剩下的另一个圈中的内容全部删掉。方框同理。最终变为下面的结果。

question.jpg (62.69 KB, 下载次数: 132)

question.jpg

question.jpg (60.74 KB, 下载次数: 138)

question.jpg
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

4

帖子

2

主题

0

精华

新人

F 币
23 元
贡献
10 点
沙发
 楼主| 发表于 2022-7-23 13:19:23 | 显示全部楼层
zjk0112 发表于 2022-7-22 20:25
不知所云,你这和稀疏矩阵有啥关系啊。再说稀疏矩阵的稀疏格式又不是一种,coo,csr,csc,格式不一样三元 ...

我可能没表达清楚。你看下我新上传的照片。我现在得到了三个一维数组(维度是7)分别是u,v,a,但是需要将u,v值相同时所对应的a值进行相加,并且只保留一组,即如图中所示,最后u,v,a的维度变为了5。

4

帖子

2

主题

0

精华

新人

F 币
23 元
贡献
10 点
板凳
 楼主| 发表于 2022-7-26 17:00:53 | 显示全部楼层
zjk0112 发表于 2022-7-25 09:53
你想要两个5阶的矩阵相加?只是这两个矩阵是稀疏的。是这个意思不?
做加法就行了。就用到for循环就可以了 ...

首先谢谢你的代码。不过不是两个稀疏矩阵相加。是有u,v,a三个一维数组,只不过这其中的u,v有相同值得时候,对应的a需要相加。
我写的是代码
allocate(u(nnz),v(nnz),a(nnz))  写的是有限元的代码,
所以所有的非零元素都在一个(sumNode*ndf,sumNode*ndf)的二维数组中
allocate(K(sumNode*ndf,sumNode*ndf))

      do i = 1,nnz
          K(u(i),v(i)) = K(u(i),v(i)) + a(i)
      enddo



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

本版积分规则

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

GMT+8, 2024-5-14 17:45

Powered by Tencent X3.4

© 2013-2024 Tencent

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