私は3つのベクトルから3次元の行列を構築しようとしています。ここでは、各ベクトルの各要素間の最小二乗距離を行列の要素として取ります。 3Dマトリックスdの例えばループなしで3D最小二乗距離行列を作成しますか?
、
d(m,n,o)=(vec1(m)-vec2(n))^2+(vec1(m)-vec3(o))^2+(vec2(n)-vec1(o))^2
は、私は現在、forループ、トリプルでこれをやっている:
d=zeros(N,M,O);
for o=1:O
for n=1:N
for m=1:M
d(n,m,o)=(((t(n)-r(m))^2)+((t(n)-z(o))^2)+((r(m)-z(o))^2));
end
end
end
私の質問は、実行するより速く、賢い方法があるかどうかであります私が使用することができ、このの2Dバージョンのインスタンスのために、この:
%for n=1:N
% for m=1:M
% d(n,m)=(t(n)-r(m))^2;
% end
%end
d=(repmat(t(:),1,M)-repmat(r(:)',N,1)).^2; %this replaces the nested for loops from above Thanks Georg Schmitz
ゲオルク・シュミッツが来ている誰でもrepmatを使用して2dバージョンの2重ループを置き換える方法があります。私はもちろん、この方法を採用して、私のトリプルforループを、repmatメソッド(o)を何度も繰り返すループに置き換えることもできますが、ループなしでこれを行う方法があるはずです。
アイデア?おかげ
私はbsxfunの使用を検討しましたが、2つの引数maxを回避する方法を見つけられませんでした。 – user1185474