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]
请注意 A1
和 A2
显示不同。
A1
和 A2
报告相同 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
计算函数 x
; x[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 个(子) 单元格 .
花括号用于获取单元格的内容,因此,
A2 = x{1}
ans =
'a' [1] [2]
结果与
相同
A2 = {'a',[1],[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)
>> 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]
请注意 A1
和 A2
显示不同。
A1
和 A2
报告相同 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
计算函数 x
; x[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 个(子) 单元格 .
花括号用于获取单元格的内容,因此,
A2 = x{1} ans = 'a' [1] [2]
结果与
相同A2 = {'a',[1],[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)