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

조회 수: 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 CenterFile Exchange에서 グラフとネットワーク アルゴリズム에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!