行列から特定の値を抽出

13 次查看(过去 30 天)
雅晶
雅晶 2022-11-15
评论: 雅晶 2022-11-18
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]と自動で出てくるようなスクリプトを作成したいです。
どのようにすればいいでしょうか。

采纳的回答

交感神経優位なあかべぇ
下記にスクリプト例を記述します。
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 个评论
雅晶
雅晶 2022-11-18
ありがとうございました。参考になりました。

请先登录,再进行评论。

更多回答(2 个)

Shunichi Kusano
Shunichi Kusano 2022-11-15
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 个评论
雅晶
雅晶 2022-11-18
ありがとうございました。参考にさせていただきます。

请先登录,再进行评论。


Atsushi Ueno
Atsushi Ueno 2022-11-15
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 个评论
雅晶
雅晶 2022-11-18
ありがとうございました。参考にさせていただきます。

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 行列および配列 的更多信息

标签

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!