问题描述,我想在一个100x3的矩阵里找出每列的最大值(以及对应序号)--对应两个行向量,然后,通过循环再将此向量的每一个值与对应的100x3的矩阵的每一列比较,找出可能与最大值相同的数,并记录序号,赋予新矩阵。
问题所在,一开始没有考虑周全,直接上字母
for i=1:1:3;
K=find(P(:,i)==y(i));%最大
结果就是维度不匹配。
所以我改了K,变成K(:,i),结果可以了。
但是新问题,我复制了同样但是最小值(总分),期间出现不知名错误,clear后修改一遍好了。
但是后面又出现错误,
找出原因,只知道这个3次循环只有2次(i的值为2),为什么循环会中止?不解。
后改进,将Z的(:,i)去掉,结果成功了!但是新疑惑,此前我已经将Z定为2x3的矩阵,循环后变成了1x3(发现无须定好Z也不会影响运算速度),K却不会,而且K必须得加(:,i),不然K只是一个值,不是向量矩阵。
代码如下
rand('state',0);%0状态下的随机数,对应还有1状态下的
P=45+round(50*rand(100,3));%产生45到95的随机数
[y,ni]=max(P);%把每一列的最大数赋与y
[y0,ni0]=min(P);%最小
K=zeros(2,3);
E=zeros(100,1);
R=zeros(100,1);
T=zeros(100,1);
for i=1:3
K(:,i)=find(P(:,i)==y(i));%把与每一列最大数相等的数的序号赋予K的i列,
end
for i=1:1:3;
Z=find(P(:,i)==y0(i));%最小
end
m=mean(P);%把每门课所有学生取平均
s=std(P);%每门课的标准差
[b,n]=max(sum(P,2));%找出总分最大b并把序号赋予N
[b1,n1]=min(sum(P,2));%找出总分最小值
[score,num]=sort(sum(P,2),'descend');%把总分从大到小赋予score,且记录对应的序号
for i=1:1:100
E(i)=P(num(i),1);%序号对应的数值赋予它
end
for j=1:1:100
R(j)=P(num(j),2);
end
for k=1:1:100
T(k)=P(num(k),3);
end
A=[num,E,R,T,score];%将所有矩阵合在一起
q=A(1:10,:);h=A(91:100,:);%取出前10和后10