สมมติว่าฉันมีเมทริกซ์สองตัว Nx2, Mx2 แทน N, M 2d เวกเตอร์ตามลำดับ มีวิธีที่ง่ายและดีในการคำนวณระยะทางระหว่างเวกเตอร์แต่ละคู่ (n, m) หรือไม่?
แน่นอนว่าวิธีที่ง่าย แต่ไม่มีประสิทธิภาพคือ:
d = zeros(N, M);
for i = 1:N,
  for j = 1:M,
    d(i,j) = norm(n(i,:) - m(j,:));
  endfor;
endfor;
คำตอบที่ใกล้เคียงที่สุดที่ฉันพบคือbsxfunใช้เช่น:
bsxfun(inline("x-y"),[1,2,3,4],[3;4;5;6])
ans =
  -2 -1  0  1
  -3 -2 -1  0
  -4 -3 -2 -1
  -5 -4 -3 -2
          
                  ฉันดูที่นี่และฉันไม่สามารถทำได้ดีกว่าการคำนวณเวกเตอร์ ฉันคิดว่าการคำนวณนี้เป็นตัวเลือกที่ดีสำหรับการเขียนฟังก์ชัน C / Fortran ภายนอก
                
                
                  
                    —
                    Aron Ahmadia 
                    
                  
                
              
                  ฉันพนันว่าคุณสามารถสร้างเมทริกซ์ 2xNxM ที่คุณเติมด้วยผลิตภัณฑ์ชั้นนอกจากนั้นให้แต่ละรายการและผลรวมตามแกน zeroth และรากที่สอง ใน Python สิ่งนี้จะมีลักษณะ: distance_matrix = (n [:,:, nexaxis] * m [:, newaxis ,:]); distance_matrix = distance_matrix ** 2; distance_matrix = sqrt (distance_matrix.sum (แกน = 1)); หากคุณต้องการทราบ n-vector ที่ใกล้เคียงที่สุดมีวิธีที่ดีกว่ามากในการทำเช่นนี้!
                
                
                  
                    —
                    meawoppl 
                    
                  
                
              
                  @ meawoppl (ใหม่ถึงคู่) ฉันค้นพบวิธีการใช้แพ็คเกจพีชคณิตเชิงเส้นใน Octave ซึ่งมีให้
                
                  
                    —
                    Kelley van Evert 
                    
                  
                
              cartprodดังนั้นตอนนี้ฉันสามารถเขียน: (1)  x = cartprod(n(:,1), m(:,1)); (2)  y = cartprod(n(:,2), m(:,2)); (3) d = sqrt((x(:,1)-x(:,2)).^2+(y(:,1)-y(:,2)).^2) .. 3 ซึ่ง .. ทำงานเร็วขึ้นมาก!
                
                  วิธีการเกี่ยวกับoctave.sourceforge.net/statistics/function/pdist.html
                
                
                  
                    —
                    Nemo