根据逻辑向量获取向量中两个连续值的平均值

时间:2013-12-10 18:16:05

标签: arrays matlab vector

我正在从文件中读取数据,我正在尝试对包含数据的向量进行一些操作,基本上我想检查值是否来自连续行,如果是,我想平均每两个并将值放入输出向量

部分数据和行

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循环

由于

1 个答案:

答案 0 :(得分: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;