【问题标题】:Finding count of unique triple in Numpy Ndarray [duplicate]在 Numpy Ndarray 中查找唯一三元组的计数 [重复]
【发布时间】:2020-02-05 18:27:57
【问题描述】:

我有一些像这样的 ndarray 形式的图像:

# **INPUT**
img = np.array(
[
    [
        [0, 0, 255],
        [0, 0, 255],
        [0, 0, 255],
        [0, 0, 255],
        [0, 0, 255],
        [0, 0, 255],
        [0, 0, 255],
        [0, 0, 255]
    ],
    [
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [0, 255, 0],
        [0, 255, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0]
    ],
    [
        [255, 0, 0],
        [0, 255, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0]
    ],
    [
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0],
        [255, 0, 0]
    ],
])

我需要找到图像中每种颜色的计数,即以下 3 个元组的计数:[0, 0, 255],[255, 0, 0],[0, 255, 0]。在这种情况下:

# **Desired OUTPUT**
 unique  [[  0   0 255]
 [255   0   0]
 [  0 255   0]]
 counts  [8 21 3]

这就是我所做的:

print('AXIS 0 -----------------------------------')
unique0, counts0 = np.unique(img, axis=0, return_counts=True)
print('unique0 ', unique0)
print('counts0 ', counts0)

这是输出:

  AXIS 0 -----------------------------------
  unique0  [[[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

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

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

 [[255   0   0]
  [255   0   0]
  [255   0   0]
  [255   0   0]
  [255   0   0]
  [255   0   0]
  [255   0   0]
  [255   0   0]]]
counts0  [1 1 1 1]

我在尝试使用 axis=1 (counts1 [2 1 5]) 时得到了类似的结果。

我还尝试将元组作为轴输入axis=(0, 1),它返回错误TypeError: an integer is required (got type tuple)

任何想法我做错了什么?

【问题讨论】:

标签: python numpy unique


【解决方案1】:

首先使用np.concatenate 沿第一个轴连接ndarray,然后然后使用np.unique,设置return_counts=True,这将返回扁平@的计数987654326@数组:

unique, counts = np.unique(np.concatenate(mg), axis=0, return_counts=True)

print(unique)
[[  0   0 255]
 [  0 255   0]
 [255   0   0]]

print(counts)
# array([ 8,  3, 21], dtype=int64)

【讨论】:

    【解决方案2】:

    你可以这样做:

    elements, counts = np.unique(img.reshape((-1, 3)), axis=0, return_counts=True)
    print(elements, counts)
    

    输出

    [[  0   0 255]
     [  0 255   0]
     [255   0   0]] [ 8  3 21]
    

    【讨论】:

      猜你喜欢
      • 2015-03-07
      • 2015-04-13
      • 2016-05-03
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2017-06-07
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多