行列から特定の値を抽出

32 visualizzazioni (ultimi 30 giorni)
雅晶
雅晶 il 15 Nov 2022
Commentato: 雅晶 il 18 Nov 2022
A = [299,3;350,30;350,7;450,116;450,60;500,38;500,82;568,14];があるとします。
そして、A(:,1)がy座標で、A(:,2)がx座標だとします。
そこで、それぞれのy座標で一番小さいx座標の値とそれに対応したy座標を抽出したいです。
上記の例でいうと、y = 299ではx = 3しかないので299と3を抽出、y = 350ではx = 7,30があるので350と7を抽出するということをしたいです。
つまり、最終的にB = [299,3;350,7;450,60;500,38;568,14]と自動で出てくるようなスクリプトを作成したいです。
どのようにすればいいでしょうか。

Risposta accettata

交感神経優位なあかべぇ
下記にスクリプト例を記述します。
A = [299,3;350,30;350,7;450,116;450,60;500,38;500,82;568,14];
B = zeros(0, 2);
while ~isempty(A)
minY = min(A(:, 1));
minYIdx = A(:, 1) == minY; % Yの最小値のインデックス取得
minX = min(A(minYIdx, 2)); % Y最小値インデックスの中から最も小さいXを取得
B(end + 1, :) = [minY, minX];
A(minYIdx, :) = []; % AからYの最小値インデックスを削除
end
B
B = 5×2
299 3 350 7 450 60 500 38 568 14
  1 Commento
雅晶
雅晶 il 18 Nov 2022
ありがとうございました。参考になりました。

Accedi per commentare.

Più risposte (2)

Shunichi Kusano
Shunichi Kusano il 15 Nov 2022
grpstats関数が適当かと思います。
A = [299,3;350,30;350,7;450,116;450,60;500,38;500,82;568,14];
minx = grpstats(A(:,2),A(:,1),'min') % XをYグループについてまとめて最小値を計算
minx = 5×1
3 7 60 38 14
y = unique(A(:,1))
y = 5×1
299 350 450 500 568
  1 Commento
雅晶
雅晶 il 18 Nov 2022
ありがとうございました。参考にさせていただきます。

Accedi per commentare.


Atsushi Ueno
Atsushi Ueno il 15 Nov 2022
sortrows関数とunique関数を使いました。
A = [299,3;350,30;350,7;450,116;450,60;500,38;500,82;568,14];
SA = sortrows(A);
[~,ia,~] = unique(SA(:,1));
SA(ia,:)
ans = 5×2
299 3 350 7 450 60 500 38 568 14
  1 Commento
雅晶
雅晶 il 18 Nov 2022
ありがとうございました。参考にさせていただきます。

Accedi per commentare.

Categorie

Scopri di più su Matrix Indexing in Help Center e File Exchange

Tag

Prodotti


Release

R2022b

Community Treasure Hunt

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

Start Hunting!