查找一维数组中连续标志值的索引

乐福

我正在寻找在1D数组中找到值0。我在此数组中有几个0值,大多数情况下是连续的0值。现在,我想做的就是在每个连续出现的位置中找到第一个零值出现和最后一个零值出现的索引,下面我将举一个例子使事情变得更加清楚:想象一下,我有以下数组:

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.53878698007533210 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

现在,我尝试的组合anyminlocmaxloc,或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显然不喜欢它。

高性能标志

有限的测试使我相信这可以解决您的直接问题。我还没有对其进行广泛的测试,我会留给您。它将0s的每次运行的开始和停止的索引写入数组b

  INTEGER, DIMENSION(:),ALLOCATABLE :: b
  LOGICAL :: zz
  ...    
  ALLOCATE(b(0))
  zz = .false.
  DO ix = 1, SIZE(a)
     IF (.NOT.zz.AND.a(ix)==0) THEN
        b = [b,ix]
        zz = .TRUE.
     END IF
     IF (zz.AND.a(ix)/=0) THEN
        b = [b,ix-1]
        zz = .FALSE.
     END IF
  END DO

这产生了,当喂给您展示给我们的阵列时,

b == [1 6 26 28 30 34]

如果那没有吸引力,这似乎也可行:

  b = [(ix,ix=1,SIZE(a))]
  WHERE(a/=0.0) b = 0
  c = PACK(b,b/=0)
  b = PACK(c,(CSHIFT(c,1)-c)*(CSHIFT(c,-1)-c)/=-1)

如果您在确定此版本时遇到困难,请坚持在第一个代码段中进行显式循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据一维数组的索引和值构造二维numpy数组

来自分类Dev

在Numpy中将离散值的一维数组转换为连续值的nD数组

来自分类Dev

在数组中查找唯一值

来自分类Dev

在连续值序列中查找最后一行

来自分类Dev

给定值查找数组索引

来自分类Dev

查找数组元素的维索引

来自分类Dev

在与索引比较的数组中查找值

来自分类Dev

查找3维NumPy数组的唯一值的索引

来自分类Dev

在3D数组中查找连续值

来自分类Dev

在numpy数组中查找连续的

来自分类Dev

查找一维数组中连续标志值的索引

来自分类Dev

在Simulink中查找二维数组中第一个非零元素的索引

来自分类Dev

Matlab中的N维数组索引:在中间查找数组

来自分类Dev

在列表中查找连续项的索引

来自分类Dev

在二维数组中查找特定值

来自分类Dev

C ++如何在n个元素的一维数组中查找最小值和最大值?

来自分类Dev

如何在二维数组(矩阵)中查找每一行的最大值C#

来自分类Dev

如何将连续索引号添加到数组中的唯一值

来自分类Dev

在一维数组中搜索特定值

来自分类Dev

在Python的N维元组数组中查找最常见的元组第一和第二值的最快方法

来自分类Dev

在二维数组中搜索一维数组的索引,并逐行返回java

来自分类Dev

非连续范围成一维数组

来自分类Dev

在WPF网格中显示带有索引的一维数组

来自分类Dev

从随机维数组中查找值的索引

来自分类Dev

查找二维数组中具有一些非零元素的列的索引

来自分类Dev

从给定数组的公共第一个索引值中查找和分组数组中的值

来自分类Dev

在字符串数组中查找下一个匹配项的索引和值

来自分类Dev

在数组中查找重复连续值的最短方法

来自分类Dev

在Javascript中查找二维数组中所有连续1的矩形的坐标

Related 相关文章

  1. 1

    根据一维数组的索引和值构造二维numpy数组

  2. 2

    在Numpy中将离散值的一维数组转换为连续值的nD数组

  3. 3

    在数组中查找唯一值

  4. 4

    在连续值序列中查找最后一行

  5. 5

    给定值查找数组索引

  6. 6

    查找数组元素的维索引

  7. 7

    在与索引比较的数组中查找值

  8. 8

    查找3维NumPy数组的唯一值的索引

  9. 9

    在3D数组中查找连续值

  10. 10

    在numpy数组中查找连续的

  11. 11

    查找一维数组中连续标志值的索引

  12. 12

    在Simulink中查找二维数组中第一个非零元素的索引

  13. 13

    Matlab中的N维数组索引:在中间查找数组

  14. 14

    在列表中查找连续项的索引

  15. 15

    在二维数组中查找特定值

  16. 16

    C ++如何在n个元素的一维数组中查找最小值和最大值?

  17. 17

    如何在二维数组(矩阵)中查找每一行的最大值C#

  18. 18

    如何将连续索引号添加到数组中的唯一值

  19. 19

    在一维数组中搜索特定值

  20. 20

    在Python的N维元组数组中查找最常见的元组第一和第二值的最快方法

  21. 21

    在二维数组中搜索一维数组的索引,并逐行返回java

  22. 22

    非连续范围成一维数组

  23. 23

    在WPF网格中显示带有索引的一维数组

  24. 24

    从随机维数组中查找值的索引

  25. 25

    查找二维数组中具有一些非零元素的列的索引

  26. 26

    从给定数组的公共第一个索引值中查找和分组数组中的值

  27. 27

    在字符串数组中查找下一个匹配项的索引和值

  28. 28

    在数组中查找重复连续值的最短方法

  29. 29

    在Javascript中查找二维数组中所有连续1的矩形的坐标

热门标签

归档