2013-12-10 93 views
0

我正在讀取文件中的數據,我試圖對包含數據的矢量進行一些操作,基本上我想檢查值是否來自連續行,如果是的話我要平均每兩個並把值在輸出矢量數據和線條的根據邏輯向量獲取矢量中兩個連續值的平均值

部分

lines=[153 152 153 154 233 233 234 235 280 279 280 281]; 
Sail=[ 3 4 3 1.5 3 3 1 2 2.5 5 2.5 2 ]; 

這裏是我在做什麼

Sail=S(lines); 
Y=diff(lines)==1; 
for ii=1:length(Y) 
    if Y(ii) 
     output(ceil(ii/2))=(Sail(ii)+Sail(ii+1))/2; 
    end 
end 

這是正確的也是有辦法做到這一點沒有一個for循環

感謝

回答

0

我的建議:

y = find(diff(lines)==1); 
output = mean([Sail(y);Sail(y+1)]); 

這是假設,當你有,說[233 234 235],你希望一個值平均來自行[233 234]的值和一個平均來自[234 245]的值。如果您想在數據中存在更長的連續行集時做更復雜的事情,那麼問題會變得更加複雜。

順便說一句,做一些類似(ceil(ii/2))是一個糟糕的主意 - 您無法保證每個匹配值ii的唯一索引。如果你確實需要一個與Sail相同尺寸的輸出(在非匹配區域將有零),那麼你可以這樣做:

output2 = zeros(size(Sail)); 
output2(y)=output; 
相關問題