我正在查找1D數組中的值0。我在這個數組中有幾個0值,大部分時間是連續的0個值。現在我想要做的就是找到每個連續出現的第一個零值出現和最後一個零值出現的索引,下面我將給出一個例子來說明事情: 想象一下,我有以下數組:查找1D數組中連續標誌值的索引
A= 0.0 0.0 0.0 0.0 0.0 0.0 0.38458693526004206 0.37630968444637147 0.40920888023862656 0.37240138383511134 0.38032672100490084 0.37013107455599198 0.40263333907360693 0.36804456033540955 0.41199172743738527 0.42761170349633443 0.39300715826673704 0.39783513932402137 0.44013743441396674 0.435127008833611 0.48217350280280391 0.47501246018014148 0.49234819258730078 0.54559998531569354 0.47840534103437832 0.0 0.0 0.0 0.51927791704510429 0.0 0.0 0.0 0.0 0.0 0.45862555500619961 0.50158980306905965 0.45676444815553296 0.49679306608627022 0. 0.50186256107128602 0.51714780706878094 0.53005606067091249 0.48409168179213419 0.48594430950932133 0.50963106475909081 0.49300327248076087 0.50531667704394834 0.46415085995913757 0.51930900041928330
所以我期待在第一位置和零在每個連續出現的最後一個位置,我應該得到如下:
min_loc_1=1
max_loc_1=6
min_loc_2=26
max_loc_2=28
min_loc_3=30
max_loc_3=34
現在我想的any
組合,minloc
,maxloc
,或forall
,但我無法弄清楚
do ijk = 1, size(work1)
if (work1(ijk) .eq. 0) then
location1(ijk) = ijk
end if
end do
min_loc=minloc(location1)
max_loc1=maxloc(location1)
我不能使用where
,因爲我調用它內部的子程序和Fortran顯然並未喜歡它。
Thanks高性能Mark,兩種方法都很完美,非常感謝 – lefou
被警告,進一步的測試表明,這兩種方法都不能完美工作。嘗試首先使用單個「0.0」進行數組測試,然後放在最後。然後找出一個修復... –
好吧,我會更深入地瞭解一下,但我已經測試了幾個數組,直到現在看來對我來說很好,如果它不工作,我會嘗試找出解決方案,如果我找不到一個,我會再問一次。 – lefou