コメントに基づいて、データを X と呼ばれる N x 3 行列の形式に変換する方法がわかります。ここX(:,1)
で、 は最初のインデックス、X(:,2)
は 2 番目のインデックス、X(:,3)
は対応する距離です。
インデックス (id1... idx) が任意の数値ラベルであると仮定しましょう。
したがって、次のことができます。
% First, build a list of all the unique indices
indx = unique([X(:,1); X(:,2)]);
Nindx = length(indx);
% Second, initialize an empty connection matrix, C
C = zeros(Nindx, Nindx); %or you could use NaN(Nindx, Nindx)
% Third, loop over the rows of X, and map them to points in the matrix C
for n = 1:size(X,1)
row = find(X(n,1) == indx);
col = find(X(n,2) == indx);
C(row,col) = X(n,3);
end
これは最も効率的な方法ではありません (ベクトル化された方法で X のインデックスを [1... Nindx] の範囲に再マップすることになります) が、5000 個の ID では問題ないはずです。
非常に多数の一意のインデックスを処理することになり、インデックス ペアのうちごくわずかしか距離値が割り当てられていない場合はhelp sparse
、事前に大きな値を割り当てる代わりに、スパース マトリックスを使用してみてください。ゼロ行列。