大家好,若在N維空間中有M個點,分別屬於不同類別,該如何快速計算各類別的中心座標?
目前寫法如下
for ii=1:L
temp = double(INITIAL_CLUSTER==ii);
center(ii,:) = sum(temp.*INPUT_DATA) / sum(temp);
end
其中INPUT_DATA為MxN;INITIAL_CLUSTER為Mx1,內為M個點對應的存放組別1~L。
中間試了很多方法想要取代或是減少迴圈數,有grpstats、splitapply及consolidator,
但在運算效率上還是前述迴圈有明顯的優勢,
是否有不用迴圈又快速的方法可以達到同樣效果?謝謝大家!
作者:
sunev (Veritas)
2020-02-20 08:44:00有點像是accumarray,不過accumarray裡的val只能是一維而你這裡的INPUT_DATA是N維。如果N不大,可以用迴圈處理那個維度的話,就用accumarray試試。for ii=1:L,center(:,i)=accumarray(INITIAL_CLUSTER,INPUT_DATA(:,i),[],@mean);end