查看: 1278|回复: 20|关注: 1

[已解决] matlab矩阵操作

[复制链接]

新手

7 麦片

财富积分


050


4

主题

16

帖子

0

最佳答案
本人非专业,各位大佬手下留情啊
我现在有一个N行2列的矩阵
a= 1  2
     2  3
     4  2
     3  1
     ......
我需要得到一个新的矩阵,这个矩阵首先使用一个因子假设:x=2
矩阵第一列,每x行取平均值,矩阵第二列,每x行取总和
上面的矩阵就应该得到
b= 1.5  5   (第一列是第一行和第二行的平均值,第二列是第一行和第二行的和)
      3.5  3
      ......
这样matlab程序代码该怎么写,小弟先谢了

论坛优秀回答者

权威

7648 麦片

财富积分



5

主题

9082

帖子

1746

最佳答案
  • 关注者: 396
发表于 2017-12-14 19:48:31 | 显示全部楼层
  1. b=[arrayfun(@(k) mean(a(k:k+1,1)),1:2:4)' ,arrayfun(@(k) sum(a(k:k+1,2)),1:2:4)']
复制代码

论坛优秀回答者

专家

2198 麦片

财富积分


20003000


1

主题

2424

帖子

495

最佳答案
  • 关注者: 83
发表于 2017-12-14 19:50:42 | 显示全部楼层
本帖最后由 maple1314168 于 2017-12-14 23:47 编辑

a= [1  2 ;2  3;4  2; 3  1]
a =
     1     2
     2     3
     4     2
     3     1


b=mat2cell(a,2*ones(1,size(a,1)/2),[2]);
c=cell2mat(cellfun(@(x)[mean(x(:,1)) sum(x(:,2))],b,'un',0))
c =
    1.5000    5.0000
    3.5000    3.0000


新手

7 麦片

财富积分


050


4

主题

16

帖子

0

最佳答案
 楼主| 发表于 2017-12-14 19:55:06 | 显示全部楼层
maple1314168 发表于 2017-12-14 19:50
a=[1 2;2 3 ;4 2;3 1]
a =
     1     2

这个跟我的需求有一点区别还,假设a是100行2列,因子x=2,转换后的b应该是50行2列,每x行合并成一行

新手

7 麦片

财富积分


050


4

主题

16

帖子

0

最佳答案
 楼主| 发表于 2017-12-15 09:14:52 | 显示全部楼层
maple1314168 发表于 2017-12-14 19:50
a= [1  2 ;2  3;4  2; 3  1]
a =
     1     2

这个仅在可以整除的情况下可用,如果a长度99,就不行了:'(,有没办法考虑到整除和余数的问题,假如最后有余数,就直接使用余数的值

论坛优秀回答者

专家

2198 麦片

财富积分


20003000


1

主题

2424

帖子

495

最佳答案
  • 关注者: 83
发表于 2017-12-15 09:17:42 | 显示全部楼层
madisonsky 发表于 2017-12-15 09:14
这个仅在可以整除的情况下可用,如果a长度99,就不行了,有没办法考虑到整除和余数的问题,假如最后有 ...

自己 判断一下。奇数的话,只计算偶数行,之后加上最后一行啊!

新手

7 麦片

财富积分


050


4

主题

16

帖子

0

最佳答案
 楼主| 发表于 2017-12-15 09:52:12 | 显示全部楼层
maple1314168 发表于 2017-12-15 09:17
自己 判断一下。奇数的话,只计算偶数行,之后加上最后一行啊!

这个因子x并不是都是2的,可能是任何值,感觉很麻烦啊,我还是写循环吧
matlab语法部署需,假设我需要对一个创建好的矩阵用for循环赋值,该怎么写啊
resolution=5000; %箱子最大大小
datasize = size(data,1);
if datasize>resolution;
    factor = floor(datasize/resolution)+1; %最小整+1,代表几个值做一次装箱
end
row=floor(datasize/factor)+1;
box=ones(row,2);
for i=1:length(size(box,1))
    for j=1:lenght(factor)
        box(i,j)=??? %这里该怎么写
    end
end

论坛优秀回答者

专家

2198 麦片

财富积分


20003000


1

主题

2424

帖子

495

最佳答案
  • 关注者: 83
发表于 2017-12-15 10:34:05 | 显示全部楼层
madisonsky 发表于 2017-12-15 09:52
这个因子x并不是都是2的,可能是任何值,感觉很麻烦啊,我还是写循环吧
matlab语法部署需,假设我需要对 ...

b=mat2cell(a,2*ones(1,size(a,1)/2),[2]);

可以修改这里:
n=fix(size(a,1)/t); % t是你要求的因子。
b=mat2cell(a(1:n*t,:),t*ones(1,n),2);
c=cell2mat(cellfun(@(x)[mean(x(:,1)) sum(x(:,2))],b,'un',0));
c(n+1:size(a,1)-n*t+n,:)=a(n*t+1:size(a,1),:);

新手

7 麦片

财富积分


050


4

主题

16

帖子

0

最佳答案
 楼主| 发表于 2017-12-15 11:21:59 | 显示全部楼层
maple1314168 发表于 2017-12-15 10:34
b=mat2cell(a,2*ones(1,size(a,1)/2),[2]);

可以修改这里:

太牛了,刚才我有点没说对,假设a是99行,因子是4,那得到的b是25行应该,其中前24行是每4行一组,最后一行是3行一组,有办法改么,用您这个我大概看了下,前24行应该都计算好了

论坛优秀回答者

专家

2198 麦片

财富积分


20003000


1

主题

2424

帖子

495

最佳答案
  • 关注者: 83
发表于 2017-12-15 11:32:00 | 显示全部楼层
madisonsky 发表于 2017-12-15 11:21
太牛了,刚才我有点没说对,假设a是99行,因子是4,那得到的b是25行应该,其中前24行是每4行一组,最后一 ...

我这个已经可以啊!

a=rand(99,2);
t=4;
。。。。。
c(n+1:size(a,1)-n*t+n,:)=a(n*t+1:size(a,1),:);

得到的c就是27*2
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表