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

4 views (last 30 days)
yuma yasuda
yuma yasuda on 11 Nov 2022
Commented: Atsushi Ueno on 11 Nov 2022
特定の範囲を除外する方法を知りたいです.
例として,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 Comments
Atsushi Ueno
Atsushi Ueno on 11 Nov 2022
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] となるのか
要件が不明だったので質問させて頂きました。前者だと想定しています。
また、除外される数値に次の最小要素が含まれいた場合でも除外すると認識しています。

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 11 Nov 2022
Edited: Atsushi Ueno on 11 Nov 2022
要件通りの順序で配列に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 Comment
yuma yasuda
yuma yasuda on 11 Nov 2022
詳しくありがとうございます.
非常に助かりました.

Sign in to comment.

More Answers (0)

Categories

Find more on 行列および配列 in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!