作业帮 > 综合 > 作业

matlab 的一个向量,形如[0 0 1 1 0 0 -1 0 0 0 1]之类的,如何将0元素转化为之前第一个非零元

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/06/25 11:21:49
matlab 的一个向量,形如[0 0 1 1 0 0 -1 0 0 0 1]之类的,如何将0元素转化为之前第一个非零元素一样?
1,最开始的0不管,直到出现第一个非零元素
2,也就是,转化为 [0 0 1 1 1 1 -1 -1 -1 -1 1]
用for 循环当然可以,但是数据量很大,会比较慢.有什么合适的向量函数吗?
matlab 的一个向量,形如[0 0 1 1 0 0 -1 0 0 0 1]之类的,如何将0元素转化为之前第一个非零元
如果占总数据比例不多,先用矢量化一次找到全部0,然后再循环替换之.
Z=find(S==0);
Snew=S;
nzero=length(Z)
for i=1:nzero
\x05Snew(Z(i))=Snew(Z(i)-1);
end
注意到你的数据可能首位0,你自己看着改吧.
说实在的,我想不出有什么更好的办法,感觉替换循环是避免不了的.
但用find一次找出全部0我试了下比直接循环找时间只有1/3到1/4.0值少的情况替换工作量不大,所以我这样处理还有意义.但如果0值多,相当于循环没省还要加额外的1/3时间做了次废操作提取0.