行列の各行に対してラベル付け

8 ビュー (過去 30 日間)
YA
YA 2022 年 4 月 22 日
コメント済み: YA 2022 年 4 月 22 日
現在、MATLABで行列の各行に対してラベル付けをするアルゴリズムを考えています。
例えば [1 2 ; 3 4 ; 2 5]という行列があった場合に1行目は「1」、2行目は1行目と重複する要素がないため「2」、3行目は2が1行目と重複しているため「1」とラベルを付けるアルゴリズムを考えています。
重複する要素がある行は同じ数字のラベル付けをするというアルゴリズムです。
この例の場合、最終的には [1 ; 2 ; 1]が得られればよいということになります。
何かアイデアがある方、よろしくお願いします。
  2 件のコメント
Akira Agata
Akira Agata 2022 年 4 月 22 日
念のため確認なのですが、複数の行に重複する要素がある場合はどうなるのでしょうか?
例えば [1 2 ; 3 4 ; 2 4] という行列があった場合、3行目は1行目とも2行目とも重複する要素があることになりますが、その場合どのようなラベルになるのでしょうか?(あるいはそもそも複数の行に重複しないようなデータになっているのでしょうか?)
YA
YA 2022 年 4 月 22 日
説明が不十分で申し訳ありませんでした。
その場合はすべて同じラベル分けになるので、「1」となります。
なので、[1 ; 1 ; 1 ]が求めたいラベル分けになります。
重複が複数行になることもありうるデータとなっています。
よろしくお願いします。

サインインしてコメントする。

採用された回答

Akira Agata
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)
1 2 1
% 参考として、構築したグラフを可視化
figure
plot(G)
  1 件のコメント
YA
YA 2022 年 4 月 22 日
ご回答ありがとうございます。
グラフ理論を使うという発想はありませんでした。
とても参考になりました。ありがとうございます。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeグラフとネットワーク アルゴリズム についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!