假設(shè)我在2x4矩陣中有一些數(shù)據(jù)(4個(gè)數(shù)據(jù)點(diǎn),2個(gè)特征)X = np.array([[4,3,5,6], = [x1 x2 x3 x4] [7,4,6,5]]) “最接近的” 3x4矩陣,它指示最接近每個(gè)數(shù)據(jù)點(diǎn)x的群集k。(3個(gè)集群,4個(gè)數(shù)據(jù)點(diǎn))C = [[1 0 1 0] [0 0 0 1] [0 1 0 0]]我想找到一種有效的方法,使用numpy計(jì)算每個(gè)群集中數(shù)據(jù)點(diǎn)的平均值。我的想法是構(gòu)造一個(gè)看起來(lái)像這樣的矩陣:idea = [[x1 0 x3 0 ] [0 0 0 x4] [0 x2 0 0 ]]將其元素匯總到各列中,然后除以中的相應(yīng)元素np.sum(c,axis=1),因?yàn)榫祽?yīng)僅考慮屬于該類(lèi)的數(shù)據(jù)點(diǎn)(即不包括零)。此示例的最終預(yù)期輸出應(yīng)為3x2矩陣:output = [(x1+x3)/2 = [ [4.5 6.5] x4 [6 5 ] x2 ] [3 4 ]]我什至無(wú)法構(gòu)建看起來(lái)像我的idea矩陣的矩陣。我不知道這是否是解決這個(gè)問(wèn)題最有效的方法我想避免使用任何for循環(huán)。
1 回答

慕虎7371278
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是您策略的向量化實(shí)施:
X = np.array([[4, 3, 5, 6],[7, 4, 6, 5]])
C = np.array([[1, 0, 1, 0], [0, 0, 0, 1], [0, 1, 0, 0]])
output = X @ C.T / np.sum(C, axis=1)
print(output)
# => [[4.5 6. 3. ]
# [[6.5 5. 4. ]]
由于您的輸入點(diǎn)X是列,因此我認(rèn)為將輸出的列作為聚類(lèi)的質(zhì)心更為自然。如果您愿意,可以轉(zhuǎn)置結(jié)果。
添加回答
舉報(bào)
0/150
提交
取消