行列から特定の値を抽出

33 visualizaciones (últimos 30 días)
雅晶
雅晶 el 15 de Nov. de 2022
Comentada: 雅晶 el 18 de Nov. de 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]と自動で出てくるようなスクリプトを作成したいです。
どのようにすればいいでしょうか。

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (2)

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

Iniciar sesión para comentar.


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

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!