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

20 ビュー (過去 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 Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!