大家好,若在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