Matlab:如何将矩阵转化成 cell 元胞数组、mat2cell

目录

mat2cell()

(1) C = mat2cell(A,dim1Dist,...,dimNDist)

例 1:二维

例 2:三维

 (2) C = mat2cell(A,rowDist); % 按 dim1 划分

调用 Matlab 内置函数的方法

mat2cell()

mat2cell函数的作用是将矩阵分割成不同cell元胞

语法:C = mat2cell(A,dim1Dist,...,dimNDist)

           C = mat2cell(A,rowDist)

(1) C = mat2cell(A,dim1Dist,...,dimNDist)

dim1Dist,...,dimNDist 是向量,表示具体怎么划分不同的维度

这种调用方法将 A 按不同的维度划分。A 可以是二维的,三维的,甚至更高维,首先看一张图,区分 A 的维度:

                                                 

例 1:二维

A = rand(60,50); % 设 A = rand(A.dim1,A.dim2) 作个记号,方便后续的总结
C = mat2cell(A,[10,20,30],[20,30]); % C = mat2cell(A,dim1Dist,dim2Dist)

 产生的元胞结构如图,相当于 dim1 和 dim2 的排列组合

具体划分如图

总结:1)划分要求:sum(dimNDist) = A.dimN; 

            2)划分后 C 的维度:size(C) = [length(dim1Dist),...,length(dimNDist)].

例 2:三维

理解了二维的转化,三维也是一样的,这里以mnist手写数据集中的维度作为例子:

A = rand(28,28,60000); %  28*28*60000 double
C = mat2cell(A,28,28,ones(1,60000)); % 1*1*60000 cell
% 最后可以用 reshape(C,60000,1) 将 C 转成二维的。

 因为mnist每张图片的大小是28*28的,所以前两个维度不进行划分,将最后一个维度划分成60000份(60000张图片),这里

sum(ones(1,60000)) = 60000;那么最后得到的维度将是length(28)*length(28)*length(ones(1,60000)) = 28*28*60000;

P.s.:(1)如果某个维度缺省了

A = rand(3,0,4);
C = mat2cell(A,[1 2],[],[2 1 1]);

 (2) C = mat2cell(A,rowDist); % 按 dim1 划分

二维:

A = rand(3,100);
C = mat2cell(A,[1 2]);

三维:

A = rand(3,100,3);
C = mat2cell(A,[1 2]);


 

本文主要参考 Matlab 的 help 文档

  • 5
    点赞
  • 28
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

热爱生活的菇凉

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值