目录
(1) C = mat2cell(A,dim1Dist,...,dimNDist)
(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 文档