现在,我有一个N*N
矩阵,垫子。我也有
maskmat=(a(1),a(2),...,a(i),...a(N))
。
a(i)
等于0
或1
。
如果a(i)==1
,则应删除矩阵垫的第i列和第i行。如果a(i)==0
,我们不做任何更改。因此,我们可以获得符合规则maskmat
的子矩阵。
如何在Fortran中实现它?
答案 0 :(得分:1)
一种方法是使用向量下标,其中下标来自条件。
要获取要保留的行和列的索引:
integer, allocatable :: idx(:)
idx = PACK([(i, i=1,N)], maskmat.eq.0)
然后对于删除了位的矩阵
integer, allocatable :: submat(:,:)
submat = mat(idx, idx)