代码之家  ›  专栏  ›  技术社区  ›  levant pied

Numpy获取满足条件的坐标和坐标?

  •  0
  • levant pied  · 技术社区  · 7 年前

    例如,假设我有这个数组:

    [[45 78 95 49 98 18 54]
     [36 77 92 15 68 25 89]
     [29 44 58 18 85 65 43]
     [19 63 62 78 48 12 43]
     [90 65 17 90 65 44 53]]
    

    • 把它们归零

      [[ 0 78  0 49  0  0  0]
       [36 77 92 15 68 25 89]
       [ 0 44  0 18  0  0  0]
       [19 63 62 78 48 12 43]
       [ 0 65  0 90  0  0  0]]
      
    • 从结果数组中获取所有元素的坐标,这些元素为>50

       [[0 1]
        [1 1]
        [1 2]
        [1 4]
        [1 6]
        [3 1]
        [3 2]
        [3 3]
        [4 1]
        [4 3]]
      

    比如说:

    rs = numpy.array([0, 2, 4])[:, None]
    cs = numpy.array([0, 2, 4, 5, 6])
    a[rs, cs] = 0
    res = numpy.argwhere(a > 50)
    

    有没有更快的(因为我必须复制 a

    1 回复  |  直到 7 年前
        1
  •  4
  •   Paul Panzer    7 年前

    下面是一个使用 ogrid

    >>> i, j = np.ogrid[(*map(slice, a.shape),)]
    >>> np.argwhere((a>50) & ((i|2==3) | (j|2==3)))
    array([[0, 1],
           [1, 1],
           [1, 2],
           [1, 4],
           [1, 6],
           [3, 1],
           [3, 2],
           [3, 3],
           [4, 1],
           [4, 3]])