首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Numpy Ndarray中唯一三重计数的求取

Numpy Ndarray中唯一三重计数的求取
EN

Stack Overflow用户
提问于 2019-10-08 12:58:39
回答 2查看 148关注 0票数 0

我有一些像这样的图像

代码语言:javascript
复制
# **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]
    ],
])

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

代码语言:javascript
复制
# **Desired OUTPUT**
 unique  [[  0   0 255]
 [255   0   0]
 [  0 255   0]]
 counts  [8 21 3]

这就是我所做的:

代码语言:javascript
复制
print('AXIS 0 -----------------------------------')
unique0, counts0 = np.unique(img, axis=0, return_counts=True)
print('unique0 ', unique0)
print('counts0 ', counts0)

这是输出:

代码语言:javascript
复制
  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)

你知道我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-08 13:12:05

首先使用np.concatenate连接第一个轴上的ndarray,然后使用np.unique作为您要做的操作,设置return_counts=True,这将返回扁平的2D数组的计数:

代码语言:javascript
复制
unique, counts = np.unique(np.concatenate(mg), axis=0, return_counts=True)

代码语言:javascript
复制
print(unique)
[[  0   0 255]
 [  0 255   0]
 [255   0   0]]

print(counts)
# array([ 8,  3, 21], dtype=int64)
票数 2
EN

Stack Overflow用户

发布于 2019-10-08 13:04:51

你可以这样做:

代码语言:javascript
复制
elements, counts = np.unique(img.reshape((-1, 3)), axis=0, return_counts=True)
print(elements, counts)

输出

代码语言:javascript
复制
[[  0   0 255]
 [  0 255   0]
 [255   0   0]] [ 8  3 21]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58286837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档