我有一个1 x n数组。我想检查每个元素是否大于其五个后续元素。也就是i>i+1 & i>i+2 & i>i+3 & i>i+4 & i>i+5
。
如果没有任何循环,我该怎么做?
答案 0 :(得分:4)
idx = 1:numel(x)-5;
I = x(idx) > x(idx+1) & x(idx) > x(idx+2) & x(idx) > x(idx+3) & x(idx) > x(idx+4) & x(idx) > x(idx+5)
请注意,这并不能真正处理x的最后5个元素,因为它取决于您希望输出的内容。
答案 1 :(得分:3)
考虑这个矢量化解决方案:
N = 5; %# number of consequent values
idx = hankel(2:N+1, N+1:numel(x)); %# indices of sliding windows
y = all( bsxfun(@gt, x(1:end-N), x(idx)) ) %# comparison
结果是一个布尔向量,其中y(i)
表示x(i)
是否大于x(i+1), x(i+2), ..., x(i+N)