2014-06-11 52 views
0

我有我的價值在這裏疊加值:Matlab的 - 從vectores與多發性條件

x=[0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000 1.125 1.250 ...] 
y=[4.1 4.6 4.3 4.4 4.8 4.6 4.3 4.9 4.1 4.2 ...] 

然後,我希望所有的值>4.5

  • 如果我有一個孤立的數值它應該被丟棄;
  • 如果我有一個孤立的值,但它被兩個值>4.5包圍,那麼它應該計數。

所以結果應該是:

xx=[0.625 0.750 0.875 1.000 ...] 
yy=[4.8 4.6 4.3 4.9 ...] 

plot(x,y,'g',xx,yy,'k') 
+1

當你的y數據是:[4.9 3 4.6 4.1 4.7 4.1 4.2 4.6 4.3 4.9 ...]'會發生什麼?這會導致:'[4.9 4.6 4.7 4.6 4.9 ...]'? –

+0

是的,這是最好的方式,我沒有意識到可能發生! – user3683409

回答

0

在我看來,這是你想要的東西:

x=[0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000 1.125 1.250] 
y=[4.1 4.6 4.3 4.4 4.8 4.6 4.3 4.9 4.1 4.2] 

xx = x(y > 4.5 | [0, (arrayfun(@(n) (y(n-1) > 4.5 & y(n+1) ... 
    > 4.5 & y(n) <= 4.5), 2:length(y)-1)), 0]) 
yy = y(y > 4.5 | [0, (arrayfun(@(n) (y(n-1) > 4.5 & y(n+1) ... 
    > 4.5 & y(n) <= 4.5), 2:length(y)-1)), 0]) 

xx = 
    0.25000 0.62500 0.75000 0.87500 1.00000 
yy = 
    4.6000 4.8000 4.6000 4.3000 4.9000 

更新:從意見有了新的樣本數據:

y = [4.9 3 4.6 4.1 4.7 4.1 4.2 4.6 4.3 4.9]; 

yy = 
    4.9000 3.0000 4.6000 4.1000 4.7000 4.6000 4.3000 4.9000 

It 可能也是要:

xx = x((y > 4.5 & [1, (arrayfun(@(n) (y(n-1) > 4.5 | y(n+1) ... 
    > 4.5), 2:length(y)-1)), 1]) | [0, (arrayfun(@(n) (y(n-1) > 4.5 & y(n+1) ... 
    > 4.5 & y(n) <= 4.5), 2:length(y)-1)), 0]) 
yy = y((y > 4.5 & [1, (arrayfun(@(n) (y(n-1) > 4.5 | y(n+1) ... 
    > 4.5), 2:length(y)-1)), 1]) | [0, (arrayfun(@(n) (y(n-1) > 4.5 & y(n+1) ... 
    > 4.5 & y(n) <= 4.5), 2:length(y)-1)), 0]) 

xx = 
    0.62500 0.75000 0.87500 
yy = 
    4.8000 4.6000 4.3000 
+0

...除了「如果我有一個孤立值,但它在兩個值之間> 4.5,那麼它應該被計數爲」 –

+0

「,但是如果值> 4.5被隔離,則不應該被計數:D –

+0

@TheMinion,我不確定這是否正確。包括4.9。它看起來好像只是措辭不佳..?嗯,但第一個4.6不是。來自OP的評論在這裏會很不錯... OP? –

0

與循環另一種解決方案,因爲原來的問題被標記爲for-loop。其中返回該示例的解決方案:

v=[0,0,y,0,0]; 
u=[0,0,x,0,0]; 
for k=3:1:numel(v) 
    if v(k)>4.5 && (v(k-2)>4.5 || v(k-1)>4.5 || v(k+1)>4.5 || v(k+2)>4.5) 
    elseif v(k)<4.5 && v(k-1)>4.5 && v(k+1)>4.5 
    else 
     v(k)=0; 
    end 
end 
yy=v(v>0); 
xx=u(v>0); 
figure(2) 
plot(x,y,'g',xx,yy,'k') 

此代碼可以通過更改if情況進行優化。我使用了這個設置,因爲它和問題一樣。