効率的な方法の提供や、最小限の手順で同じ結果を得るための提供コードの実行に役立つ人がいますか?私はあなたに感謝します。MATLABで効率的な動的ウィンドウの作成
私は元の配列を持っている:
A = [1 1 1 4 4 4 4 3 1 0 0 2 6 6 6 6 6 7 7 2 2 3 3 2];
私はいくつかの制限を適用し、私はいくつかの新しい配列を受けた後に極大値の配列からいくつかの値を削除:
A = [1 1 1 4.3 4.5 4 4.3 3 1 0 0 2 6.2 6.3 6 6.2 7.4 8 7.2 2 2 3 3 2];
出力は次のようになります。
Yposlocfiltered = [6 15 23];
idx = [4 6 3];
Yneglocfiltered = [2 9 20];
idx_neg = [1 1 2];
ここで、idx(ローカル最大値)が見つかるはずだが、値が大きいほど前方が大きいとチェックする。
例
If I will find 4 and 4.5, 4.3 is greater than 4 include it in backward window
4.3 is greater than 4 include it in forward window.
私が極大値と、今後の極大値の背後にある値の範囲を見つける必要があります。
問題なく動作するコードを作成しようとしましたが、長すぎます。
この操作を最小限の手順で、より速い方法で実行するためのアイデアはありますか?
私は負のローカルマキシマコードと同様に正のローカルマキシマのコードを提供しています。これだけのレプリカです。
コード:のみ正のローカル極大値について
clc
clear all
A = [1 0 1 4.3 4.5 5 4.3 3 0 0 0 2 6.2 6.3 7 6.2 7.4 8 7.2 1 2 3 4 2];
Yposlocfiltered = [ 6 15 23];
idx = [4 6 3];
Yneglocfiltered = [2 9 20];
idx_neg = [1 1 2];
for b = 1: numel(idx)
for c = 1:numel(A)
f = Yposlocfiltered(1,b)-c ;
g = Yposlocfiltered(1,b)+c ;
% if (f > 0 && g <= numel(X))
if(f > 0)
if (A(Yposlocfiltered(1,b)-c))> idx(1,b)
else
d= f+1;
z(b)= d;
backward_window = z;
break
end
end
end
end
for r = 1: numel(idx)
for s = 1:numel(A)
u = Yposlocfiltered(1,r)-s ;
v = Yposlocfiltered(1,r)+s ;
% if (f > 0 && g <= numel(X))
if(v <=numel(A))
if (A(Yposlocfiltered(1,r)+s))> idx(1,r)
else
w= v-1;
y(r)= w;
forward_window = y;
break
end
end
end
end
n=4
for i=1:length(backward_window)
range = backward_window(i): forward_window(i);
p = range
if n <= numel(p)
p = range(1:n)
A(p) = idx(i);
else
% if (size(range)<= 3)
A(p) = idx(i);
end
end
アンソニー。あなたのような偉大で正確で成熟した返信に感謝します。それは私のために完璧に働いた。私のためにあなたの時間と労力を節約してくれてありがとう。 – Peter