作业帮 > 综合 > 作业

matlab问题,本人初学,还望有高人能够指点迷津,问题是关于两矩阵不同位置元素比较的

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 18:31:09
matlab问题,本人初学,还望有高人能够指点迷津,问题是关于两矩阵不同位置元素比较的
首先是,两个矩阵,一个矩阵a是n行x列,另一个矩阵b是1行x列,(均有重复元素).想计算数组a中每行有几个元素和b相同,且含计算重复的元素.举例如下求c
数组  a=[2 3 1 2 5;
3 1 2 1 3;
6 7 1 9 9]
数组b=[1 3 2 1 3]
数组c=[3;5;1]
我试过了matlab的intersect,但其无法计算重复元素,本人刚接触matlab,实难解决此问题,如何写此程序,在此先多谢了
感谢hoo_摆渡的回答,昨晚我运行了您的命令,输出的结果确实是【4;5;1】,但是这不对,因为a的第一行与b实际只有3个相同的元素,比如a的第一行=[2 3 1 2 5;] 和b=[1 3 2 1 3]比较,a的
第一个元素2等于b中第三个元素2,(因b里只有一个2),故当a的第四个元素2在与b比较时将显示出b中没有等同2的元素了,故c=[3;5;1].而ismember不能做到这一点,求问,a是n行x列,b是1行x列时候,如何能得到对应的矩阵c?在此,等待有高人出现啊
其实,这个问题,调用循环就可以解决,若只想用命令的话,可以用如下命令:
c=[sum(ismember(a(1,:),b));sum(ismember(a(2,:),b));sum(ismember(a(3,:),b))];
输出的结果是【4;5;1】,你上面自己写的结果【3;5;1】是错误的.
根据你的问题补充,才明白你的意思,这时程序应写成:
C=zeros(size(A,1),1);
for i=1: size(A,1)
m=B;
for j=1:length(B)
k=find(m==A(i,j),1,'first');
if isempty(k)
continue;
else
C(i)=C(i)+1;
m(k)=[];
end
end
end
总而言之,我希望这些信息对其他人能够有所帮助.