通过实例代码来说明吧,代码如下:>> N{1,1} = [1 2; 4 5]; N{1,2} = 'Name'; N{2,1} = 2-4i; N{2,2} = 7;>> c = N{1,2}c =Name>> cc=N(1,2)cc = 'Name'>> whos Name Size Bytes Class Attributes N 2x2 304 cell c 1x4 8 char cc 1x1 68 cell d 1x1 8 double dd 4x1 304 cell 我想问两个问题,⒈为何通过c = N{1,2}访问的数据name没有单引号,而通过 cc=N(1,2)访问的又有?⒉通过whos查看内存,cc占用的68 bytes是如何来的?ps:请各位热心回答的朋友放心,收到能让我明白的答案我都会及时把分送出的,我有判断力,也有理解力。
1、c = N{1,2} 得到的是字符串类型,是没有引号的;而cc = N(1,2)得到是仍然是cell类型,所以带有引号;{}是cell类型转换成其他类型的运算符,看看这个:N{:,:}ans = 1 2 4 5ans = 2.0000 - 4.0000ians =Nameans = 72、cc占用的空间大是因为 cc 中存储的不仅仅有数据,还有数据的类型以及相关的其它信息,所以占用的内存空间大。
这里涉及到单元阵列的索引方式单元阵列的表示有两种方式,一种是内容索引,一种是单元索引。 内容索引要用到大括号{},还有他们的下标,例如楼主的N{1,2}属于内容索引。 内容索引的这种类型定义了包含在一个单元中的数据结构的内容。 单元索引则是把存储于单元中的数据用大括号括起来,单元的下标用普通下标标记法。例如N(1,2)。 单元索引的这种类型创建了包含有指定值的一个数据结构,并把这个数据结构赋于一个单元。 他们的区别在于你直接定义并给单元阵列赋值时的形式,比如: 内容索引: N{1,1}=[1 2 ;4 5]; N{1,2} = 'Name'; N{2,1} = 2-4i; N{2,2} = 7;对应的单元索引形式: N(1,1)={[1 2;4 5]}; N(1,2)={'Name'}; N(2,1)={2-4i}; N(2,2)={7};关于楼主的第二个问题: 因为cc=N(1,2)是单元索引形式,所以cc是一个单元类型,其所占内存空间不仅要存入数据的数值,还要指定数据的数据类型,而且单元阵列不像矩阵或者数组在MATLAB中有特定的存储结构,这就是导致cc占用空间这么大的原因,至于68Bytes怎么得来的,这个确实不知道。 期待有MATLAB大师来解答。 期待楼主加分哦,很努力了,O(∩_∩)O~