例如有一个矩阵4*4
A=[1 1 1 2
3 3 4 4
1 2 2 2
3 3 3 3]
我要将它转换为
A=[1 2r 2
3 r 4 r
1 2 2r
3 3r]
里面的r是重复符号,例如 1 2r 是指 1 1 1 , 3 3r 是指 3 3 3 3
我这样变换是为了将它代入到我需要的软件中去,这样子可以减少数据量(相对于我用的那个软件),主要应用于医学三维建模。
我也知道这种问题要把数值矩阵和字符串矩阵结合,而且每一行的矩阵个数都不一样。现在就是想找出些思路。
这位仁兄,用好的想法,可以相互交流一下~
转换后想在matlab里面保存矩阵,还比较麻烦
逐行处理,然后直接写到文件还比较方便,不需要储存长短不一的矩阵
嗯,谢谢了,不过我差不多弄出来了
追答clc;clear;
A=[1 1 1 2
3 3 4 4
1 2 2 2
3 3 3 3];
[m n]=size(A);
for ii=1:m
d=[1 find(diff(A(ii,:)))+1];%不连续的第一个数字的位置
dd=diff([d m+1])-1; %到下个字符的长度-1
s=[]; %空字符串
for jj=1:length(d) %d和dd是长度相同的
s=[s,' ',num2str(A(ii,d(jj)))];%数字转为字符串
if dd(jj)>1
s=[s,' ',num2str(dd(jj)) 'r'];%重复超过1个,转为字符串 'xr'
elseif dd(jj)==1
s=[s,' r']; %重复1个转为字符串 'r'
end
end
fprintf('%s\n',s(2:end)); %打印一行到屏幕,容易改为到文件,2:end去掉第一个空格
end
显示结果是
1 2r 2
3 r 4 r
1 2 2r
3 3r