看板 MATLAB 關於我們 聯絡資訊
※ 引述《Anny19 (安妮)》之銘言: 這是一個古老的 trick 了, 問題可以直接變成矩陣相乘可以飛快。 現在假設 x = [X', Y'] X Y 為你所寫的, x: 100 x 2 一般而言, x: n x m, n 是 data 筆數 m 是維度, 想要算出每個 row 之間 pair-wise distance. 最快的方法是利用 ||a - b||^2 = a'a - 2a'b + b'b 所以只要很神奇的二行 xx = x*x'; d = bsxfun(@minus, bsxfun(@plus, diag(xx), diag(xx)'), 2*xx); ( 經 sunev 發現 d = bsxfun(@plus, diag(xx), diag(xx)') - 2*xx; ) d 會是 n x n 對稱矩陣, d(i, j) = d(j, i) = ||i-th row - j-th row||^2 : 一維陣列 X/Y 為100個點的位置 x/y 分量 : X=[x1 x2 x3....x100]; : Y=[y1 y2 y3....y100]; : 有些情況下 X 和Y會跑出多餘的點 : 所以我想計算出每個點與剩餘點的距離 : 目的是想找出相鄰太近的質點,使其合併 : 我有寫出來,但總覺得用的方法太笨 : 求高手指點 : 我的程式碼: : for n=1:100 : Xtemp=X(n); : Ytemp=Y(n); : distance=(Xtemp-X).^2+(Ytemp-Y).^2; : distance=sqrt(distance); : ind=find(distance~=0 & distance<20); : if isempty(ind)==0 : X(n)=(X(n)+sum(X(ind)))/(length(ind)+1); : X(ind)=[]; : Y(ind)=[]; : end : end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 207.237.248.79
sunev:好方法。外面的bsxfun是假的..XD 06/05 07:30
forloricever:對耶, 直接減就好了XD ... 06/05 07:44
※ 編輯: forloricever 來自: 207.237.248.79 (06/05 07:47)
Anny19:我現在才看到!!謝謝兩位高手的解答,我晚點來試看看 07/24 17:00