我想查找移動窗口的最大元素索引。我試圖做到這一點,如下(一個簡單的例子):在移動窗口中查找最大索引
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)。 有沒有辦法做到這一點?
感謝
我想查找移動窗口的最大元素索引。我試圖做到這一點,如下(一個簡單的例子):在移動窗口中查找最大索引
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)。 有沒有辦法做到這一點?
感謝
你可以做這樣的事情:
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
可以使用滑動窗口操作以獲取本地最大值指標,之後添加全局窗口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
非常感謝您的幫助,我通過將窗口長度添加到每個地址來做到這一點。 – Isra
我把變成一個循環,它的工作!非常感謝 – Isra