matlab 的一个向量,形如[0 0 1 1 0 0 -1 0 0 0 1]之类的,如何将0元素转化为之前第一个非零元素一样?
2个回答
展开全部
如果占总数据比例不多,先用矢量化一次找到全部0,然后再循环替换之。
Z=find(S==0);
Snew=S;
nzero=length(Z)
for
i=1:nzero
Snew(Z(i))=Snew(Z(i)-1);
end
=========================================
注意到你的数据可能首位0,你自己看着改吧。
说实在的,我想不出有什么更好的办法,感觉替换循环是避免不了的。
但用find一次找出全部0我试了下比直接循环找时间只有1/3到1/4。0值少的情况替换工作量不大,所以我这样处理还有意义。但如果0值多,相当于循环没省还要加额外的1/3时间做了次废操作提取0.
Z=find(S==0);
Snew=S;
nzero=length(Z)
for
i=1:nzero
Snew(Z(i))=Snew(Z(i)-1);
end
=========================================
注意到你的数据可能首位0,你自己看着改吧。
说实在的,我想不出有什么更好的办法,感觉替换循环是避免不了的。
但用find一次找出全部0我试了下比直接循环找时间只有1/3到1/4。0值少的情况替换工作量不大,所以我这样处理还有意义。但如果0值多,相当于循环没省还要加额外的1/3时间做了次废操作提取0.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询