2017-05-07 37 views
0

我想查找移動窗口的最大元素索引。我試圖做到這一點,如下(一個簡單的例子):在移動窗口中查找最大索引

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給我7而不是5)。 有沒有辦法做到這一點?

感謝

回答

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

相關問題