作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/06/17 12:32:05
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
matlab如何将矩阵里重复的数值都用字符表示?
你的矩阵是数值矩阵
如果要有字符'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