0

私はMatlabにかなり慣れていないので、matlabを使用してクラスタリングの仕事をしたいと思っています。3列の値がある場合

id1 id2 分散値1

id1 id3 距離値2 ....

id2 id4 分散値 i .....

合計で 5000 個の ID がありますが、一部の ID ペアには Python の距離値がありません。ループを作成して、これらの距離値をマトリックス形式にインポートできます。どうすればmatlabでそれを行うことができますか? また、matlab に id1、...idx が識別され、3 番目の列が値であることを認識させます。

ありがとう!

4

1 に答える 1

0

コメントに基づいて、データを 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、事前に大きな値を割り当てる代わりに、スパース マトリックスを使用してみてください。ゼロ行列。

于 2013-05-31T23:35:35.983 に答える