ユークリッド距離に基づいて、あるベクトルから別のベクトルへのポイントのマッピングを実行するコードを作成し、それが正しく機能することを確認しました。
ただし、時間がかかりすぎます。基本的に、A および B ベクトルのユークリッド距離の行列を作成し、その最小値を見つけました。これらの点のマッピングを示した後、次のマッピングが発生するように NaN としてマークすることにより、ユークリッド行列から行と列を削除します。
現在非常に遅いため、このコードはより効率的ですか...
Euclid = distance(A,B); % calculates euclid distance column v/s column wise.
for var = 1 : value
%# finds the min of Euclid and its position, when Euclid is viewed as a 1D array
[~, position] = min(Euclid(:));
%#transform the index in the 1D view to 2 indices
[i,j] = ind2sub(size(Euclid),position);
%display(strcat(num2str(i),32, num2str(j)));
mapping = [A(1,i) A(2,i) B(1,j) B(2,j)];
fprintf(FID,'%d %d %d %d\n', mapping );
Euclid( i , : ) = NaN;
Euclid( : , j ) = NaN;
%counter = counter + 1;
end
問題は、5000 X 5000 の行列の場合、コードが長時間ハングすることです...
誰か助けてくれませんか...