关于matlab结构体访问()和{}的区别问题?

通过实例代码来说明吧,代码如下:
>> 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:请各位热心回答的朋友放心,收到能让我明白的答案我都会及时把分送出的,我有判断力,也有理解力。
最新回答
蘇瑾熙

2024-09-14 03:03:43

1、c = N{1,2} 得到的是字符串类型,是没有引号的;而cc = N(1,2)得到是仍然是cell类型,所以带有引号;{}是cell类型转换成其他类型的运算符,看看这个:

N{:,:}

ans =

1 2
4 5

ans =

2.0000 - 4.0000i

ans =

Name

ans =

7

2、cc占用的空间大是因为 cc 中存储的不仅仅有数据,还有数据的类型以及相关的其它信息,所以占用的内存空间大。
一杯清酒当人生

2024-09-14 02:03:18

这里涉及到单元阵列的索引方式
单元阵列的表示有两种方式,一种是内容索引,一种是单元索引。
内容索引要用到大括号{},还有他们的下标,例如楼主的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~