2014-04-21 111 views
0

現在,我有一個N*N矩陣,mat。我也有如何在Fortran中從更大的矩陣中提取子矩陣?

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

a(i)等於01

如果a(i)==1,矩陣墊的第i行和第i行應該被移除。如果a(i)==0,我們不作任何更改。因此,我們可以得到符合規則maskmat的子矩陣。

如何在Fortran中實現它?

+0

我覺得pack'和'unpack'的'組合可以用適當的口罩來做到這一點。 – bdforbes

+1

你嘗試過什麼嗎?你有一些我們可以查看的代碼,給你一些建議,或者你想要一個完整的解決方案嗎? –

回答

1

一種方法是使用矢量下標,其中下標來自條件。

要得到保留的行和列的索引:

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

,然後用位矩陣去除

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