代码之家  ›  专栏  ›  技术社区  ›  jss367

在3D numpy数组中查找唯一元组

  •  1
  • jss367  · 技术社区  · 4 年前

    我试图在numpy数组中查找uniques元组,但无法找到。基于其他的答案我试过了 np.unique 在设置轴的值时,但它没有提供我要找的东西。举个例子:

    b = np.array([[[255, 0, 0], [255, 0, 0]], [[255, 0, 0], [0, 0, 0]]])
    

    我正在寻找一种方法来告诉我它有两个元组:(255,0,0)和(0,0,0)。以下是使用 np.唯一

    np.unique(b, axis=0)
    
    array([[[255,   0,   0],
            [  0,   0,   0]],
    
           [[255,   0,   0],
            [255,   0,   0]]])
    
    
    np.unique(b, axis=1)
    
    array([[[255,   0,   0],
            [255,   0,   0]],
    
           [[  0,   0,   0],
            [255,   0,   0]]])
    
    np.unique(b, axis=2)
    
    array([[[  0, 255],
            [  0, 255]],
    
           [[  0, 255],
            [  0,   0]]])
    

    我怎么让它回来 [255, 0, 0], [0, 0, 0] ?

    2 回复  |  直到 4 年前
        1
  •  3
  •   Frank Yellin    4 年前

    先把b做成Nx3数组。然后使用unique。

    >>> np.unique(b.reshape(-1, 3), axis=0)
    array([[  0,   0,   0],
           [255,   0,   0]])
    
        2
  •  1
  •   U13-Forward    4 年前

    尝试使用 list 理解力:

    print(np.array([i for i in b if len(set(map(tuple, i))) == len(i)]))
    

    [[[255   0   0]
      [  0   0   0]]]