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

18 vues (au cours des 30 derniers jours)
yuma yasuda
yuma yasuda le 11 Nov 2022
Commenté : Atsushi Ueno le 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 commentaires
Atsushi Ueno
Atsushi Ueno le 11 Nov 2022
Modifié(e) : Atsushi Ueno le 11 Nov 2022
A = [ 10, 11, 12, 13, 9, 14, 15, 2, 16, 3, 17, 5, 18]
の場合、求める出力は何になりますか?
Atsushi Ueno
Atsushi Ueno le 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] となるのか
要件が不明だったので質問させて頂きました。前者だと想定しています。
また、除外される数値に次の最小要素が含まれいた場合でも除外すると認識しています。

Connectez-vous pour commenter.

Réponse acceptée

Atsushi Ueno
Atsushi Ueno le 11 Nov 2022
Modifié(e) : Atsushi Ueno le 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 commentaire
yuma yasuda
yuma yasuda le 11 Nov 2022
詳しくありがとうございます.
非常に助かりました.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits


Version

R2022a

Community Treasure Hunt

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

Start Hunting!