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

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

Sign in to comment.

Accepted Answer

Akira Agata
Akira Agata on 22 Apr 2022
Edited: Akira Agata on 22 Apr 2022
グラフ理論を使う方法はどうでしょうか?
配列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 Comment
YA
YA on 22 Apr 2022
ご回答ありがとうございます。
グラフ理論を使うという発想はありませんでした。
とても参考になりました。ありがとうございます。

Sign in to comment.

More Answers (0)

Categories

Find more on グラフとネットワーク アルゴリズム in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!