首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找列表中每个分类器的平均协调数。

查找列表中每个分类器的平均协调数。
EN

Stack Overflow用户
提问于 2020-03-02 19:48:59
回答 2查看 30关注 0票数 0

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

points是一个协调点的列表;

classiification是由n到m长度的1s或0的列表,其中n是points中的值数,m是分类的数目。

该函数将返回分配给每个分类的协调器的平均值。在这个例子中有两个分类,每个points中的协调只能分配给一个分类(标记为1,所有其他都标记为0)。

例子如下:

代码语言:javascript
复制
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]])
代码语言:javascript
复制
my_func(points, classification) #--> np.array([[1.5 , 2.5],
                                #              [5. , 6. ]])

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-03 13:12:44

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

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

在下面的步骤中,我将列表列表转换为元组列表,因为列表不能作为字典的键,因为它们的性质是可变的。

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

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2020-03-02 19:59:23

  1. 创建两个数组,resultcount,它们的大小都是分类数,将每个值初始化为[0, 0]表示结果,将0初始化为count。count
  2. repeat
  3. 取下一个点并进行分类,直到没有剩下的
  4. ,使用classification.index(1)查找resultcount数组
  5. 的索引,将点的值添加到相应的result,并增加相应的
  6. 步骤2<代码>H 219<代码>H 120将结果中的每个值除以其对应的<代码>D21值><代码>H 222H 123返回result

我让你来为它写代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60495649

复制
相关文章

相似问题

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