簡體   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