0
現在,我有一個N*N
矩陣,mat。我也有如何在Fortran中從更大的矩陣中提取子矩陣?
maskmat=(a(1),a(2),...,a(i),...a(N))
。
a(i)
等於0
或1
。
如果a(i)==1
,矩陣墊的第i行和第i行應該被移除。如果a(i)==0
,我們不作任何更改。因此,我們可以得到符合規則maskmat
的子矩陣。
如何在Fortran中實現它?
現在,我有一個N*N
矩陣,mat。我也有如何在Fortran中從更大的矩陣中提取子矩陣?
maskmat=(a(1),a(2),...,a(i),...a(N))
。
a(i)
等於0
或1
。
如果a(i)==1
,矩陣墊的第i行和第i行應該被移除。如果a(i)==0
,我們不作任何更改。因此,我們可以得到符合規則maskmat
的子矩陣。
如何在Fortran中實現它?
一種方法是使用矢量下標,其中下標來自條件。
要得到保留的行和列的索引:
integer, allocatable :: idx(:)
idx = PACK([(i, i=1,N)], maskmat.eq.0)
,然後用位矩陣去除
integer, allocatable :: submat(:,:)
submat = mat(idx, idx)
我覺得pack'和'unpack'的'組合可以用適當的口罩來做到這一點。 – bdforbes
你嘗試過什麼嗎?你有一些我們可以查看的代碼,給你一些建議,或者你想要一個完整的解決方案嗎? –