[英]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)。
解決這個問題的最佳方法是什么? 謝謝
result
和count
,都以分類數作為它們的大小,將每個值初始化為[0, 0]
結果和0
計數。classification.index(1)
找到result
和count
數組的索引result
並增加相應的count
count
數值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.