官方文档:
功能为转换元组数组为原始给定类型的数组
分析:
1 使用 {} 将元组,数组组成矩阵
示例一:
e11 = {zeros(1,9), {ones(1,3), ones(1,6)}; ones(1,9), zeros(1,9); ones(2,9), zeros(2,9); ones(10,9) * 10, ones(10,9) * 9}
e12 = {zeros(1,9), {ones(1,3), ones(1,6)}; ones(1,9), zeros(1,9); ones(2,9), zeros(2,9); ones(10,9) * 10, ones(10,9) * 9}
ee = {zeros(1,2), ones(1,4); zeros(1,4), ones(1,2);ones(1,1) * 10, ones(1,3) * 9}
对于上述代码,我们可以看出:
2 使用cell2mat访问矩阵的子元组
如果要访问某个组分块,直接使用ee(x,y)即可得到第x行第y列的组分cell块;
但要在遍历块中的块,则需要使用ee{x,y}(z)得到第x行第y列的第z个的孙子组分cell块;
1号坑:
如果你使用cell2mat(e12),就报错;因为它同时包含了cell和double数组
2号坑:
cell2mat(e12{2,1})就可以,因为第一行的第二列的第一个元组就是cell
sonCell121 = cell2mat(e11{1,2}(1));%取矩阵第一行第二个块中的第一个cell将其转化为矩阵
sonCell121 =
1 1 1
别慌,还有3号坑呢!
当你尝试cell2mat(ee{1,1}(1))或者cell2mat(ee{1,1})时,又起幺蛾子了,因为对于ee而言,cell2mat(ee{1,1})的第一行第一列是一个数组,不是cell; 更进一步,cell2mat(ee{1,1}(1))变成了一个数;更不行,因为访问的位置必须是一个cell,报错如下:
因为要访问的位置是一个元素,并非cell,所以报错了。但是:
ee{1,1}(1)
是可以得到该位置的元素值1的;
不好意思,还要再来一个但是:
cell2mat(ee(1,1));
是可行的,能够调用cell2mat函数
总结: