Diyelim ki sırasıyla N, M 2d vektörlerini temsil eden iki Nx2, Mx2 matrisine sahibim. Her vektör çifti (n, m) arasındaki mesafeleri hesaplamanın basit ve iyi bir yolu var mı?
Kolay ama verimsiz yol elbette:
d = zeros(N, M);
for i = 1:N,
for j = 1:M,
d(i,j) = norm(n(i,:) - m(j,:));
endfor;
endfor;
Bulduğum en yakın cevap şu şekilde bsxfun
kullanılıyor:
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
Buna bir göz attım ve hesaplamayı vektör yapmaktan daha iyisini yapamadım. Bu hesaplamanın harici bir C / Fortran işlevi yazmak için oldukça iyi bir aday olduğunu düşünüyorum.
—
Aron Ahmadia
Bahse girerim, bir dış ürünle doldurduğunuz 2xNxM matrisi yapabilir, daha sonra girişlerin her birini kare ve sıfırıncı eksen ve kare kök boyunca toplayabilirsiniz. Python'da bu şöyle görünecektir: distance_matrix = (n [:,:, nexaxis] * m [:, newaxis ,:]); distance_matrix = distance_matrix ** 2; distance_matrix = sqrt (distance_matrix.sum (eksen = 1)); Sadece en yakın n-vektörleri bilmeniz gerekiyorsa, bunu yapmanın çok daha iyi yolları vardır!
—
meawoppl
@meawoppl (Octave'den New'e) Octave'de lineer-cebir paketinin nasıl kullanıldığını öğrendim
—
Kelley van Evert
cartprod
, bu da şimdi yazabiliyorum: (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)
.. ki bu çok daha hızlı çalışır!