x(1) 和 x{1} 之间的区别

Difference between x(1) and x{1}

>> x = {  {'a',[1],[2]};  {'b',[3],[4]}  }
x =    
    {1x3 cell}
    {1x3 cell}

>> A1 = x(1)    
A1 =     
    {1x3 cell}

>> A2 = x{1}   
A2 =    
    'a'    [1]    [2]

请注意 A1A2 显示不同。

A1A2 报告相同 class 和维度:

>> info = @(x){class(x),size(x)};
>> info(A1)     
ans =    
    'cell'    [1x2 double]

>> info(A2)     
ans =     
    'cell'    [1x2 double]

然而他们和不被认为是平等的:

>> isequal( A1, A2 )    
ans =    
     0

然而,A1{:} 被认为是 等于 A2:

>> isequal( A1{:}, A2 )    
ans =    
     1

有人可以解释一下这是怎么回事吗?

data{1}是访问一个单元格的内容 data(1) 是创建一个单元格,其中包含第一个数据条目的副本。这与 :

相同
>> A1=cell(1,1);
>> A1{1}=data{1};

因此,在您的示例中,A1 是一个包含一个单元格的单元格,而 A2 是一个包含三个条目的单元格

() 用于函数输入和索引数组; []用于表示数组; {} 用于索引单元格。

A = [2 1]; % Creates and array A with elements 2 and 1
A(2) =2; % Sets the second element of A to 2
B = cell(1,2); % creates a cell array
B{2} = A; % Stores A in the second cell of B

所以结论是:x(1) select 是数组 x 的第一个元素,或者在 1 计算函数 xx[1] 不应该,因为方括号不能用来索引东西; x{1} 将 select 单元格数组 x 中的第一个单元格。

关于您的具体问题:

A1 = x(1); % makes a copy of the element on index one, being a 1x3 cell
A2 = x{1}; % stores the content of the cell at element 1 in A2

最后A1{:}从单元格中取出单元格的内容,准备作为一个单独的变量存储,因此它等于A2,它已经包含了那个内容。 (A1{:} 是指出这一点的 comma separated list, thanks to 。)

您的变量 x 是一个 单元格 包含 2 个(子) 单元格 .

  1. 花括号用于获取单元格的内容,因此,

    A2 = x{1}
    ans = 
       'a'    [1]    [2]
    

    结果与

    相同
    A2 = {'a',[1],[2]}
    
  2. 括号用于索引,因此 returns 的 子集 (子)细胞

    A1 = x(1)    
    A1 =     
        {1x3 cell}
    

    结果与

    相同
    A1 = { {'a',[1],[2]} }
    

您的匿名信息功能 returns 一个单元格(需要,因为内容是混合类型)。结果

'cell'    [1x2 double]

说明 A1 和 A2 都是单元格,这是正确的,不考虑 A1 是包含单元格的单元格而 A2 是包含一个字符和 2 个数字的单元格这一事实。

[1x2 double] 简单地表明大小的答案本身就是大小 [1x2]。只要您不使用高于 2 的维度,就是如此。

如果您更深入地研究您的 info 答案,您将看到实际大小:

A1info = info(A1);
A2info = info(A2);
A1info{2}
ans =
     1     1
A2info{2}
ans =
     1     3

isequal( A1, A2 )蜂鸣的部分false我想你现在明白了。

此外,isequal( A1{:}, A2) 是正确的,因为 {:} "de-cell" A1 并挑选出其内容。 在这种情况下,您也可以输入 isequal( A1{1}, A2)