繁体   English   中英

查找列表中每个分类器的平均坐标

[英]Find the average co-ordinates for each classifier in a list

我想编写一个接受两个输入的函数:

points是一个坐标点列表,并且;

classiification是一个长度为 n×m 的 1 或 0 的列表,其中 n 是points的值的数量,而 m 是分类的数量。

该函数将返回分配给每个分类的坐标的平均值。 在示例中,有 2 个分类,每个坐标points只能分配给一个分类(标记为 1,所有其他标记为 0)。

下面的例子:

points = np.array([[1,1], [2,4], [4,6], [5,6], [6,6]])
classification = np.array([[1, 0],[1, 0],[0, 1],[0, 1],[0, 1]])
my_func(points, classification) #--> np.array([[1.5 , 2.5],
                                #              [5. , 6. ]])

因此,第一个点 (1,1) 已分配给第一个分类器 (1,0),而第三个点 (4,6) 已分配给第二个分类器 (0,1)。

解决这个问题的最佳方法是什么? 谢谢

  1. 创建两个数组, resultcount ,都以分类数作为它们的大小,将每个值初始化为[0, 0]结果和0计数。
  2. 取下一个点和分类,直到没有剩下的
  3. 使用classification.index(1)找到resultcount数组的索引
  4. 将点的值添加到相应的result并增加相应的count
  5. 重复步骤 2
  6. 将结果中的每个值除以相应的count数值
  7. 返回result

我会让你为它编写代码。

由于字典是对涉及映射的数据进行操作的最简单方法。 我用字典来解决你的问题。

points = np.array([[1,1], [2,4], [4,6], [5,6], [6,6]])
classification = np.array([[1, 0],[1, 0],[0, 1],[0, 1],[0, 1]])

我在下面的步骤中将列表列表转换为元组列表,因为列表由于其可变性而不能作为字典的键。

classification =[tuple(i) for i in classification]
dic={}
for i,j in zip(classification,points):
    if i not in dic.keys():
        dic[i]=[list(j)]
    else:
        dic[i].append(list(j))
[[sum(elem)/len(elem) for elem in zip(*j)] for i,j in dic.items()]

希望有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM