2017-05-07 5 views
0

移動中のウィンドウに対してmax要素のインデックスを探したい。私は(簡単な例)以下のようにそれを実行しようとしました:移動中のウィンドウで最大インデックスを見つける

x=[1,2,3,4,5,6,7,8,9]; 

[m,I]=max(x(1:5)) 

ans 
m=5 

I=5 

私は

[m2,I2]=max(x(3:7)); 

を言うならば、私は

ans 

m2=7 
I2=5 

を取得し、私は方法が私にインデックスを与えたいです関数に渡されたサブベクトルではなくオリジナルの大きなベクトルを参照して(私はI2が私に5ではなく7を与えたい)。 これを行う方法はありますか?

おかげ

答えて

0

あなたはこのような何か行うことができます。

x = [2,5,6,8,4,5,10,33]; 
start_w = 4; 
end_w = 7; 

[m,I] = max(x(start_w:end_w)); 

I = I + start_w - 1; %reindex to x, so that x(I)==m 
+0

私はループの中に細かい部分を入れて、うまくいった!おかげです。 – Isra

0

ローカル最大のインデックスを取得し、その後グローバルウインドウxenterインデックスを追加するためにスライディングウィンドウ操作を使用することができます。

function idx = maxidx(x) 
[~,idx] = max(x); 

および:

x = [1,2,3,4,5,6,7,8,9,1,3]; % test array 
W = 5; % window width 
% moving max idx function -> local indexes 
B = colfilt(x,[1 W],'sliding',@maxidx); 
% index addition to convert local indexes to global 
addedIdx = (1:length(x)) - floor((W+1)/2); 
% add local indexes with global addition 
res = B + addedIdx 

res = 
    3  4  5  6  7  8  9  9  9  9  9 
+0

あなたの助けをありがとう、私は各アドレスにウィンドウの長さを追加することによってそれをしました。 – Isra

関連する問題