我正在从文件中读取数据,我正在尝试对包含数据的向量进行一些操作,基本上我想检查值是否来自连续行,如果是,我想平均每两个并将值放入输出向量
部分数据和行
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 :(得分: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;