行列の各行に対してラベル付け
15 ビュー (過去 30 日間)
古いコメントを表示
現在、MATLABで行列の各行に対してラベル付けをするアルゴリズムを考えています。
例えば [1 2 ; 3 4 ; 2 5]という行列があった場合に1行目は「1」、2行目は1行目と重複する要素がないため「2」、3行目は2が1行目と重複しているため「1」とラベルを付けるアルゴリズムを考えています。
重複する要素がある行は同じ数字のラベル付けをするというアルゴリズムです。
この例の場合、最終的には [1 ; 2 ; 1]が得られればよいということになります。
何かアイデアがある方、よろしくお願いします。
2 件のコメント
Akira Agata
2022 年 4 月 22 日
念のため確認なのですが、複数の行に重複する要素がある場合はどうなるのでしょうか?
例えば [1 2 ; 3 4 ; 2 4] という行列があった場合、3行目は1行目とも2行目とも重複する要素があることになりますが、その場合どのようなラベルになるのでしょうか?(あるいはそもそも複数の行に重複しないようなデータになっているのでしょうか?)
採用された回答
Akira Agata
2022 年 4 月 22 日
編集済み: Akira Agata
2022 年 4 月 22 日
グラフ理論を使う方法はどうでしょうか?
配列Aの各要素をノード番号、各行をエッジとみなすと、配列からグラフGを構成することができます。
すると、「求めたいラベル番号」は「エッジが属するサブグラフの番号」と等価になります。
言葉だけでは分かりにくいと思いますので、以下に具体例を示します。
% 例
A = [1 2; 3 4; 2 5];
% 各行を Edge とみなしてグラフを構築
G = graph(A(:,1), A(:,2));
% ノード一覧と属するサブグラフ情報を取得
node = 1:max(A(:));
id = conncomp(G);
% Aの1列目のノードがどのサブグラフに属しているかを判別
label = interp1(node, id, A(:,1));
% ラベルを表示
disp(label)
% 参考として、構築したグラフを可視化
figure
plot(G)
その他の回答 (0 件)
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!