[运算] 阵列加减运算加速

楼主: fxxkjoe1231 (糟糕)   2020-02-18 17:38:25
各位好,若在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');
楼主: fxxkjoe1231 (糟糕)   2020-02-18 19:23:00
后来的写法是(a-b)^2=a^2-2ab+b^2的概念吗
作者: sunev (Veritas)   2020-02-18 21:20:00
yes
楼主: fxxkjoe1231 (糟糕)   2020-02-19 18:57:00
感谢,加速非常有感

Links booklink

Contact Us: admin [ a t ] ucptt.com