作者fxxkjoe1231 (鲁到入味)
看板MATLAB
标题[运算] 阵列加减运算加速
时间Tue Feb 18 17:38:25 2020
各位好,若在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,还没运算就吃了一半记忆体,在跑运算时就整个吃光卡死。
谢谢大家。
-----
Sent from JPTT on my Sony G8441.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.9.196.56 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1582018707.A.273.html
1F:推 sunev: 全矩阵算法的中间计算过程应该避不掉MxLxN大小的矩阵 02/18 18:18
2F:→ sunev: 但善用bsxfun情况可能会好一些 02/18 18:19
3F:→ sunev: 新版本可省去bsxfun就是了 02/18 18:20
4F:→ sunev: x = pemute(INPUT_DATA,[1 3 2])-... 02/18 18:21
5F:→ sunev: DISTANCE = sum(x.^2,3); 02/18 18:22
6F:→ sunev: permute(INITIAL_CENTER,[3 1 2]); <--和上一行交换 02/18 18:23
7F:推 sunev: 查到了比较快的公式 02/18 18:36
8F:→ sunev: DISTANCE=sum(INPUT_DATA.^2,2)-sum(INITIAL_CENTER.^2,2)' 02/18 18:38
9F:→ sunev: -2*(INPUT_DATA*INITIAL_CENTER'); 02/18 18:38
10F:→ fxxkjoe1231: 後来的写法是(a-b)^2=a^2-2ab+b^2的概念吗 02/18 19:23
11F:推 sunev: yes 02/18 21:20
12F:→ fxxkjoe1231: 感谢,加速非常有感 02/19 18:57