本帖最后由 zjk0112 于 2022-7-25 10:21 编辑
你想要两个5阶的矩阵相加?只是这两个矩阵是稀疏的。是这个意思不?
做加法就行了。就用到for循环就可以了。
A=[1,2,3,*,*
*,3,4,5,*
*,*,5,6,7
*,*,*,7,8
*,*,*,*,9]
对应的COO格式三元组(1-based)就是IA=(/1,1,1,2,2,2,3,3,3,4,4,5/),JA=(/1,2,3,2,3,4,3,4,5,4,5,5/),VA=(/1.0,2.0,3.0,3.0,4.0,5.0,5.0,6.0,7.0,7.0,8.0,9.0/)
B=[1,*,*,*,*
*,2,*,*,*
*,*,3,*,*
*,*,*,4,*
*,*,*,*,5]
对应的COO格式三元组 IB=(/1,2,3,4,5/) JB=(/1,2,3,4,5/) VB=(/1.0,2.0,3.0,4.0,5.0/)
A+B伪代码
!nnz为非零元个数,n为矩阵阶数,
n=5, nnzA=12, nnzB=5
do i=1, nnzA
do j=1,nnzB
if(IA(i)==IB(j) .and. JA(i)==JB(j)) then
C(IA(i),JA(i)) = VA(i)+VB(j)
end do
end do
我没理解错的,大概就这样呗,不难吧。有啥不会的呢?
|