逻辑表达式的矢量化

时间:2011-08-12 12:24:35

标签: matlab vectorization

我有一个1 x n数组。我想检查每个元素是否大于其五个后续元素。也就是i>i+1 & i>i+2 & i>i+3 & i>i+4 & i>i+5

如果没有任何循环,我该怎么做?

2 个答案:

答案 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)