看板 MATLAB 關於我們 聯絡資訊
大家好,若在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, 但在運算效率上還是前述迴圈有明顯的優勢, 是否有不用迴圈又快速的方法可以達到同樣效果?謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.60.13 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1582131411.A.5CE.html
sunev: 有點像是accumarray,不過accumarray裡的val只能是一維 02/20 08:44
sunev: 而你這裡的INPUT_DATA是N維。如果N不大,可以用迴圈處理 02/20 08:45
sunev: 那個維度的話,就用accumarray試試。 02/20 08:45
sunev: for ii=1:L,center(:,i)=accumarray(INITIAL_CLUSTER, 02/20 08:46
sunev: INPUT_DATA(:,i),[],@mean);end 02/20 08:46
fxxkjoe1231: 感謝s大,實測後仍較原始寫法慢,用accumarray雖然迴 02/20 11:04
fxxkjoe1231: 圈變少,但每次迴圈執行時間卻有顯著增加 02/20 11:04
sunev: 可以參考這個連結,把那層迴圈也省了 02/20 12:33
sunev: 但我不知道會不會比較快就是了 02/20 12:34