首页 > 解决方案 > 如何找到不同值的坐标?

问题描述

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

以下是列表的连接组件列表(50 x 10),我们labels称之为0例如[xmin,xmax,ymin,ymax]

我们以 1 为例:

{'1': [0,10,1,9], '2': [......} 

作为 python 的新手,我发现很难从头开始编写一个程序来做到这一点(不是字典的创建和填充,而是找到坐标)。numpy 中有没有办法可以做到这一点,例如np.unique(labels)可以帮助我识别唯一的标签值。

标签: pythonpython-3.xnumpy

解决方案


你需要使用np.where. 它返回两个数组:
- 第一个包含行索引y
- 第二个包含列索引x

import nupmy as np

arr = np.array(labels)

stats = dict()
for i in np.unique(arr):
    if i == 0:
        continue
    else:
        wh = np.where(arr == i)
        stats[i] = [wh[1].min(), wh[1].max(), wh[0].min(), wh[0].max()]

> {1: [0, 10, 1, 9],
   2: [29, 41, 2, 9],
   3: [13, 14, 4, 9],
   4: [18, 19, 4, 9],
   5: [21, 28, 4, 9],
   6: [43, 53, 4, 9],
   7: [9, 9, 9, 9]}

推荐阅读