2011-08-12 77 views
2

我有一個1 x n數組。我想檢查每個元素是否大於其五個結果元素。那就是,i>i+1 & i>i+2 & i>i+3 & i>i+4 & i>i+5邏輯表達式的矢量化

我該如何做到這一點沒有任何循環?

回答

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個元素,因爲它取決於您希望輸出的內容。

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)

更大