鉴于网上关于内存有关的matlab资料比较少(不像JAVA多而且很多大牛讲解),对于一些想要弄懂matlab一些原理性的朋友来说就很沮丧。我认为这真的会很影响学习效率。我作为matlab的一份子,非常想要为此出一份力。所以我便拿出一些我总结出的事物和理解来分享,共同学习,如有错误请帮忙纠正!(因为我对我的理解没有确切的把握)。
这里分享几个链接,促进学习。
Matlab内存机制
点击打开链接
Matlab官方中文学习网站
点击打开链接
Matlab元胞数组
点击打开链接
Matlab结构体数组和元胞数组
点击打开链接
已经都看过的朋友可以直接看下文
对于一般的double类型的矩阵我们可以通过:或者标量的数字来选择它的子矩阵
PS:
a = zeros(8,8);
b = a(1:7,1);
c = a(:,:);
d = a(1:end,2:3);
而对于cell矩阵,你可以使用小括号来操作,但是结果是另一个cell子矩阵,而如果用{}来对cell里的值进行操作的话,譬如
a = 1:16;
a = reshape(1:16,[4,4]);
a = num2cell(a);
%获得一个4*4的cell矩阵,里面值是1-16;
b = a{1:2,1};
你只能获取一个值。这是因为它返回的机制是和函数返回机制是一样的。函数返回多个返回值,每个返回值完全不同,a{1:2,1}在理论上可以返回完全不同的两个返回值,所以它跟接受函数返回值一样.PS:[x1,x2] = a{1:2,1}; 这样就能获得两个返回值了。这是{}的批量导出,而对于批量导入呢,你可以把a{1:2,1}的两个cell看成两个普通的变量如c,d之类的。然后如果你要在一行对这些变量进行赋值,你该怎么办?我相信有的朋友能看出来,[c,d] = deal(1,2);那么a{1,2}也是这个原理。[a{1:2,1}] = deal(1,2);因此我们能把这种cell矩阵看成一个可以动态使用的变量。
而对于结构体而言,它有部分机制和上面一样。
获得一个结构体的值是
a(1,7).x = 8;
a(1,7).y = 9;
%形成一个结构体
c = a(1,7).x;
若要批量操作
[a(1,1:end).x] = deal(1);
[x1,x2,x3,x4,x5,x6,x7] = a(1,1:end).y;
[a(1,1:end).x] = a(1,1:end).y;
原理和上面相同
如果并没有加入[],形同函数返回多个值那样
则会报出————需要大括号或点索引表达式中的一个输出,但结果有 X 个。(取决于你选中了多少个cell或者结构体)