如何从fortran中更大的矩阵中提取子矩阵?

时间:2014-04-21 02:40:51

标签: matrix fortran

现在,我有一个N*N矩阵,垫子。我也有

maskmat=(a(1),a(2),...,a(i),...a(N))

a(i)等于01

如果a(i)==1,则应删除矩阵垫的第i列和第i行。如果a(i)==0,我们不做任何更改。因此,我们可以获得符合规则maskmat的子矩阵。

如何在Fortran中实现它?

1 个答案:

答案 0 :(得分:1)

一种方法是使用向量下标,其中下标来自条件。

要获取要保留的行和列的索引:

integer, allocatable :: idx(:)
idx = PACK([(i, i=1,N)], maskmat.eq.0)

然后对于删除了位的矩阵

integer, allocatable :: submat(:,:)
submat = mat(idx, idx)