N、M 2dベクトルをそれぞれ表す2つの行列Nx2、Mx2があるとします。各ベクトルペア(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関数を作成するための非常に良い候補だと思います。
—
アロンアーマディア
2xNxMのマトリックスを作成して外積を入力し、各エントリを2乗して、0番目の軸と平方根に沿って合計することができます。Pythonでは、これは次のようになります。distance_matrix =(n [:、:、nexaxis] * m [:、newaxis ,:]); distance_matrix = distance_matrix ** 2; distance_matrix = sqrt(distance_matrix.sum(axis = 1)); 最も近いn-vectorのみを知る必要がある場合、これを行うためのより良い方法があります!
—
meawoppl
@meawoppl(オクターブに新)私が使用する方法を見つけた線形代数提供する、オクターブでパッケージを
—
ケリーヴァンエバート
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)
はるかに高速に実行..which!