我正在查找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