楼主: wangzt
2513 7

请教Matlab矩阵操作的小问题,送88金币(完结) [推广有奖]

  • 5关注
  • 7粉丝

贵宾

已卖:201份资源

院士

47%

还不是VIP/贵宾

-

威望
4
论坛币
147568607 个
通用积分
5400.6533
学术水平
2 点
热心指数
6 点
信用等级
5 点
经验
39810 点
帖子
1058
精华
0
在线时间
3299 小时
注册时间
2007-12-10
最后登录
2025-12-22

楼主
wangzt 发表于 2008-5-7 22:10:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

我有矩阵A=
1   123   223  1
2   321   212  1
3   234   234  0 

我想生成矩阵B,要分类汇总!
B中的第一行为:A中所有第四列值为1的所有行加总,在此例中即A的第一行和第二行的对应元素和。
B中的第二行为:A中所有第四列值为0的所有行加总。在此例中即为A的第三行。

我根据xiaoxiaoyishui的帮助,现在已经搞掂,

只要把分类的项目放到最后一列就可以实现分类汇兑了!

clear,clc
A=[1 2 4 1;
2 3 4 1;
3 5 6 2;
4 7 8 2
5 3 4 2];
C=sort(A(:,end)');
D(1)=C(1);
for i=length(D)+1:length(C)
if C(i) > C(i-1)
    D(length(D)+1)=C(i);
end
end
C=D
B=zeros(length(C),size(A,2));
ii=0;
for k=1:length(C)
   for i=find(A(:,size(A,2))==C(k))
   D=A(i,1:size(A,2));
   B(k,1:size(A,2))=sum(D);
   end
B(k,size(A,2))=k;
end
B

[此贴子已经被作者于2008-5-8 3:07:12编辑过]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB atlab matla Mat Lab MATLAB 矩阵 金币

沙发
xiaoxiaoyishui 发表于 2008-5-7 22:58:00

关于第二个问题:

a=[1 123 223 1;
2 321 212 1;
3 234 234 0];
b=zeros(2,4);%定义矩阵大小
for i=2:3
if a(i,4)==a(1,4)  %找到和第一行第四列的元素相同的行
for j=1:4
b(1,j)=a(1,j);
b(1,j)=b(1,j)+a(i,j);   %累加
end
end
end
b(2,:)=sum(a)-b(1,:);   %总和减去部分,即为余下部分

藤椅
xiaoxiaoyishui 发表于 2008-5-7 23:00:00

关于第一个问题我只知导入时会分开为两部分,一个是数字部分,另一个为字符,但不知两者还可组合

板凳
xcf1984 发表于 2008-5-7 23:26:00
第一个问题:可以用txt导入,一个是数字部分,另一个为字符
后面的问题就用循环和判断就可以了

报纸
wangzt 发表于 2008-5-7 23:37:00

第二个问题我的目的是分类汇总。。。。。要一个通用的,比如把A换为

1   123   223  1
2   321   212  1
3   234   234  0
4  333   444  0
5   555   333  0

要能够同时适用!可以把分类项存为一个矩阵如cataloge=[0 1]

[此贴子已经被作者于2008-5-7 23:42:25编辑过]

地板
wangzt 发表于 2008-5-7 23:47:00

我根据xiaoxiaoyishui的帮助,提供了一些改进的方法。谁帮我再改一改。。。。。谢谢了!


clear,clc
A=[1 2 4 1;
2 3 4 1;
3 5 6 2;
4 7 8 2
5 3 4 2];
C=[1 2];
B=zeros(length(C),size(A,2));
for k=1:length(C)
   for i=find(A(:,size(A,2))==C(k))
   D=A(i,1:size(A,2));
   B(k,1:size(A,2))=sum(D);
   end
B(k,size(A,2))=k;
end
B

[此贴子已经被作者于2008-5-8 3:11:58编辑过]

7
misslost 发表于 2008-5-9 09:58:00
我来帮你改,这样是不是更简洁?

clear;clc;
A=[1 2 4 1;
2 3 4 1;
3 5 6 2;
4 7 8 2
5 3 4 2];
C=[1 2];
B=zeros(length(C),size(A,2));
for k=1:length(C)
    r=find(A(:,end)==C(k));  
    B(k,1:end-1)=sum(A(r,1:end-1));
end
B(:,end)=C';
B

8
wangzt 发表于 2008-5-10 10:28:00

谢谢!少了一个循环。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 18:48