2013-06-28 94 views
2

如果如何將矩陣分成基於另一矢量幾個矩陣

A = [1 2 3; 4 5 6; 7 8 9]

B = [1 2 2]

我發現

  • A(B == 1,:)返回[1 2 3]和
  • 甲(B == 2,:)返回[4 5 6; 7 8 9]

因爲

  • 乙== 1返回[1 0 0]和
  • 乙== 2返回[0 1 1]

鑑於上述A和B的例子有沒有更簡單的方法來得到最終的矩陣[1 2 3]和[4 5 6; 7 8 9],即不使用for循環。

目標是生成聚類的質心,每個示例(A行中的行)已被分配到K均值聚類問題中。我正在考慮將生成的矩陣傳遞給mean()函數以生成質心。

+0

你是什麼意思弄?我可以看到你想概括這一點,但目前還不清楚你想要推廣到什麼。你想傳遞一個索引數組並返回一個數組數組嗎? – Stefan

+0

是的。目標是生成每個示例(A行中的行)已分配到K均值聚類問題中的聚類質心。我正在考慮將生成的矩陣傳遞給mean()函數以生成質心。 – sandeepkunkunuru

回答

1

你可以得到一個單元陣列

A = [1 2 3; 4 5 6; 7 8 9]; 
B = [1 2 2];  
arrayfun(@(lev) A(B==lev, :), unique(B), 'UniformOutput', false) 

回報

ans = 
{ 
    [1,1] = 

    1 2 3 

    [1,2] = 

    4 5 6 
    7 8 9 

} 
+0

謝謝。這樣可行 :-)。我不得不稍微改變它以獲得手段。 arrayfun(@(lev)mean(A(B == lev,:),1),unique(B),'UniformOutput',false) – sandeepkunkunuru