特定の範囲を除外する方法

18 次查看(过去 30 天)
yuma yasuda
yuma yasuda 2022-11-11
评论: Atsushi Ueno 2022-11-11
特定の範囲を除外する方法を知りたいです.
例として,A=[ 10, 11, 12, 3, 4, 9, 11, 2, 10, 13, 11, 5, 9]という配列があり,この配列から3つの最小要素を検出したいとします.そこで値を検出する際に,既に検出された値の前後2つは検出できないように除外したいです.
配列Aですと,まず2が検出されますが,2が検出されたときに2の前後2つ,つまり[ 9, 11, 10, 13]が除外されるようにしたいです.同様に2の次には,3が検出されますが,3が検出された際は[ 11, 12, 4, 9]が除外されるようにしたです.
抽象的な質問で申し訳ないのですが,よろしくお願いします.
  2 个评论
Atsushi Ueno
Atsushi Ueno 2022-11-11
编辑:Atsushi Ueno 2022-11-11
A = [ 10, 11, 12, 13, 9, 14, 15, 2, 16, 3, 17, 5, 18]
の場合、求める出力は何になりますか?
Atsushi Ueno
Atsushi Ueno 2022-11-11
A = [ 10, 11, 12, 13, 9, 14, 15, 2, 16, 3, 17, 5, 18] ⇒ 最小値は 2
A = [ 10, 11, 12, 13, 9, 14, 15, 2, 16, 3, 17, 5, 18] ⇒ 最小値は 5
A = [ 10, 11, 12, 13, 9, 14, 15, 2, 16, 3, 17, 5, 18] ⇒ 最小値は 9
従って、3つの最小要素は [2, 5, 9] となるのか
それとも
A = [ 10, 11, 12, 13, 9, 14, 15, 2, 16, 3, 17, 5, 18] ⇒ 最小値は 2
A = [ 10, 11, 12, 13, 9, 17, 5, 18] ⇒ 最小値は 5
A = [ 10, 11, 12, 13] ⇒ 最小値は 10
従って、3つの最小要素は [2, 5, 10] となるのか
要件が不明だったので質問させて頂きました。前者だと想定しています。
また、除外される数値に次の最小要素が含まれいた場合でも除外すると認識しています。

请先登录,再进行评论。

采纳的回答

Atsushi Ueno
Atsushi Ueno 2022-11-11
编辑:Atsushi Ueno 2022-11-11
要件通りの順序で配列にInfでマスクを掛けていけば目的の事が出来ます。
A = [ 10, 11, 12, 3, 4, 9, 11, 2, 10, 13, 11, 5, 9]
A = 1×13
10 11 12 3 4 9 11 2 10 13 11 5 9
answer = [];
for k = 1:3
answer(end+1) = min(A);
idx = find(A == min(A));
A(max(1,idx-2):min(idx+2,numel(A))) = inf
end
A = 1×13
10 11 12 3 4 Inf Inf Inf Inf Inf 11 5 9
A = 1×13
10 Inf Inf Inf Inf Inf Inf Inf Inf Inf 11 5 9
A = 1×13
10 Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf
answer
answer = 1×3
2 3 5
  1 个评论
yuma yasuda
yuma yasuda 2022-11-11
詳しくありがとうございます.
非常に助かりました.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2022a

Community Treasure Hunt

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

Start Hunting!