matlab如何将矩阵里重复的数值都用字符表示?

例如有一个矩阵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

第1个回答  推荐于2016-11-04
你的矩阵是数值矩阵
如果要有字符'r',那么必须转为字符

每个单元中有时一个字符,有时两个字符
所以用字符矩阵还不够,还需要用cell矩阵

还有为难题就是根据这样的改法,原来矩阵元素的个数都会改变
像第一行原来4个元素,变换后变成3个元素
而第二行又保留4个元素,那么矩阵的列数就没法固定
由于矩阵结构的改变,完成这样的换会比较麻烦

或者你说说你这样变换矩阵的目的是什么?变换结果有什么应用?追问

我这样变换是为了将它代入到我需要的软件中去,这样子可以减少数据量(相对于我用的那个软件),主要应用于医学三维建模。

我也知道这种问题要把数值矩阵和字符串矩阵结合,而且每一行的矩阵个数都不一样。现在就是想找出些思路。

这位仁兄,用好的想法,可以相互交流一下~

追答

转换后想在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

本回答被提问者和网友采纳
相似回答