我编写了一个代码,用于在矩阵中组合零。例如,如果有3个零,那么l将等于0.3并且0.3将被放入矩阵B.如果有任何其他数字,则它们是放入矩阵B,没有任何改变。
k=1;l=0;i=1;
A=J;
xx=size(A,2);
while(i<=xx)
if(A(i)~=0)
if(i==1 || A(i-1)~=0)
B(k)=A(i);
k=k+1;
i=i+1;
else
if(A(i-1)==0)
str=num2str(l);
if(mod(l,10)==0)
str=fliplr(str);
str2=strcat('0.',str);
else
str2=strcat('0.',str);
end;
num=str2num(str2);
B(k)=num;
k=k+1;
B(k)=A(i);
k=k+1;
i=i+1;
l=0;
end;
end;
else
l=l+1;
i=i+1;
end;
end;
if(l~=0)
str=num2str(l);
str2=strcat('0.',str);
num=str2num(str2);
B(k)=num;`
end;
这里,'l'的值变为等于23440并且仅取值2344.So而不是0.04432,matlab将其存储为0.2344。如何使'l'取值23440?
答案 0 :(得分:1)
如果数组以零结尾(或仅包含 零),则不执行语句if(mod(l,10)==0) ...
。而是执行脚本末尾if(l~=0)
下的分支,并且不使用函数fliplr
。
您应该编写一个函数来将l
作为输入,并返回应附加到B
的数字。然后,您可以在需要处理零的两个位置调用该函数。 (另外,我会将l
重命名为看起来不像1
的内容,但这并不是脚本无法正常工作的原因。)