各位好,若在N維空間中有M個點,要分別計算這M個點與特定L個點的相對距離,該如何在不用迴圈且最節省記憶體的前提下計算?
目前迴圈寫法如下:
for ii=1:L
DISTANCE(:,ii)=sum((INPUT_DATA-INITIAL_CENTER(ii,:)).^2,2);
end
其中DISTANCE為MxL;INPUT_DATA為MxN;INITIAL_CENTER為LxN;
後來有用repmat改寫,INPUT_DATA改MxNxL;INITIAL_CENTER為1xNxL,還沒運算就吃了一半記憶體,在跑運算時就整個吃光卡死。
謝謝大家。
作者:
sunev (Veritas)
2020-02-18 18:18:00全矩陣算法的中間計算過程應該避不掉MxLxN大小的矩陣但善用bsxfun情況可能會好一些新版本可省去bsxfun就是了x = pemute(INPUT_DATA,[1 3 2])-...DISTANCE = sum(x.^2,3);permute(INITIAL_CENTER,[3 1 2]); <--和上一行交換查到了比較快的公式DISTANCE=sum(INPUT_DATA.^2,2)-sum(INITIAL_CENTER.^2,2)'-2*(INPUT_DATA*INITIAL_CENTER');