查找列表中每个分类器的平均坐标
Find the average co-ordinates for each classifier in a list
我想编写一个接受两个输入的函数:
points
是坐标点列表and;
classiification
是 n×m 长度的 1 或 0 列表,其中 n 是 points
中值的个数,m 是分类数。
该函数将 return 分配给每个分类的坐标的平均值。示例中有 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)。
解决这个问题的最佳方法是什么?
谢谢
- 创建两个数组,
result
和count
,都以分类数作为它们的大小,将每个值初始化为[0, 0]
for result和0
for count .
- 取下一个点并分类,直到还剩none
- 使用
classification.index(1)
查找 result
和 count
数组的索引
- 将点的值加到对应的
result
上并增加对应的count
- 重复步骤 2
- 将结果中的每个值除以它对应的
count
值
- return
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()]
希望对您有所帮助。
我想编写一个接受两个输入的函数:
points
是坐标点列表and;
classiification
是 n×m 长度的 1 或 0 列表,其中 n 是 points
中值的个数,m 是分类数。
该函数将 return 分配给每个分类的坐标的平均值。示例中有 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)。
解决这个问题的最佳方法是什么? 谢谢
- 创建两个数组,
result
和count
,都以分类数作为它们的大小,将每个值初始化为[0, 0]
for result和0
for count . - 取下一个点并分类,直到还剩none
- 使用
classification.index(1)
查找result
和count
数组的索引 - 将点的值加到对应的
result
上并增加对应的count
- 重复步骤 2
- 将结果中的每个值除以它对应的
count
值 - return
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()]
希望对您有所帮助。