2021-05-17

问题描述,我想在一个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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值