我想编写一个接受两个输入的函数:
points是一个协调点的列表;
classiification是由n到m长度的1s或0的列表,其中n是points中的值数,m是分类的数目。
该函数将返回分配给每个分类的协调器的平均值。在这个例子中有两个分类,每个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)。
解决这个问题的最好方法是什么?谢谢
发布于 2020-03-03 13:12:44
因为字典是对涉及映射的数据进行操作的最简单方法。我用字典解决了你的问题。
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()]希望这能有所帮助。
发布于 2020-03-02 19:59:23
result和count,它们的大小都是分类数,将每个值初始化为[0, 0]表示结果,将0初始化为count。countclassification.index(1)查找result和count数组result,并增加相应的H 123返回result。
我让你来为它写代码。
https://stackoverflow.com/questions/60495649
复制相似问题