誰かが私を助けることができます。私はMatlabプログラムを使用しています。
ベクトル A があるとします。
A = [0 0 1 2 3 5 0 0 0 0 0 2 3 6 7 0 0 0 0 1 1 2 3 4 1]
ベクトルAから局所最大値と位置を取得したいので、取得したい答えは次のとおりです。
maxValue = 5、7、および 4;
maxLocation = 6、15、および 24;
よろしくお願いします。
誰かが私を助けることができます。私はMatlabプログラムを使用しています。
ベクトル A があるとします。
A = [0 0 1 2 3 5 0 0 0 0 0 2 3 6 7 0 0 0 0 1 1 2 3 4 1]
ベクトルAから局所最大値と位置を取得したいので、取得したい答えは次のとおりです。
maxValue = 5、7、および 4;
maxLocation = 6、15、および 24;
よろしくお願いします。
信号処理ツールボックスがある場合は、次のfindpeaks
ようになります。
[pks,locs] = findpeaks(A)
今後の参考のために、見つけたいのは極大値であることを知っておく必要があります。最大値を見つけたいと言うと、全体的な最大値 (この場合は 7) が必要なように見えます。
局所的な最大値、つまり、周囲の値よりも大きい値を探していると思います。
私の解決策は次のとおりです。
Loc = find(diff(A)(2:end)<0 & diff(A)(1:(end-1))>0)+1;
Val = A(Loc);
Loc には極大値の位置が含まれ、Val にはそれらの極大値の値が含まれます。書かれているように、エッジで最大値が見つからないことに注意してください。それらも検出したい場合は、少し変更する必要があります。
Loc = find([A(1)>A(2),(diff(A)(2:end)<0 & diff(A)(1:(end-1))>0),A(end)>A(end-1)]);
Val = A(Loc);
目標をもっと明確にする必要があります。ベクトルで極大値を見つけたいようです。
見つけたい極大値を持つベクトル (実際には配列ではなく、通常は 2 つの非単位次元を持つものを表す単語) を常に持っていますか? すべての極大値を見つけることを選択しますか? もしそうなら、これはうまくいくでしょう...
A = [0 0 1 2 3 5 0 0 0 0 0 4 5 6 7 0 0 0 0 1 1 2 3 4 1];
n = numel(A);
ind = 2:(n-1);
maxLoc = ind(find((diff(ind-1) > 0) & (diff(ind) < 0)));
% in case the max occurs at an end
if A(2) < A(1)
maxLoc = [1,maxLoc];
end
if A(n) < A(n-1)
maxLoc = [maxLoc,n];
end
maxVal = A(maxLoc);
しかし、ベクトルはどうですか
A = [0 1 2 2 1 0];
あなたは今、何を見たいですか?
繰り返しますが、要件を考える必要があります。あなたのニーズは何ですか。目標は何ですか?
そうすれば、問題は解決しやすくなり、誰かが答えやすくなります。
4、5、および 7 をすべて見つけたいですか? 試す:
Output = find(A>3)
これは、3以上の位置を持つ1xNベクトルを返します...これがあなたが望むものかどうかはわかりません