看板 MATLAB 關於我們 聯絡資訊
各位好,若在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://www.ptt.cc/bbs/MATLAB/M.1582018707.A.273.html
sunev: 全矩陣算法的中間計算過程應該避不掉MxLxN大小的矩陣 02/18 18:18
sunev: 但善用bsxfun情況可能會好一些 02/18 18:19
sunev: 新版本可省去bsxfun就是了 02/18 18:20
sunev: x = pemute(INPUT_DATA,[1 3 2])-... 02/18 18:21
sunev: DISTANCE = sum(x.^2,3); 02/18 18:22
sunev: permute(INITIAL_CENTER,[3 1 2]); <--和上一行交換 02/18 18:23
sunev: 查到了比較快的公式 02/18 18:36
sunev: DISTANCE=sum(INPUT_DATA.^2,2)-sum(INITIAL_CENTER.^2,2)' 02/18 18:38
sunev: -2*(INPUT_DATA*INITIAL_CENTER'); 02/18 18:38
fxxkjoe1231: 後來的寫法是(a-b)^2=a^2-2ab+b^2的概念嗎 02/18 19:23
sunev: yes 02/18 21:20
fxxkjoe1231: 感謝,加速非常有感 02/19 18:57