What is the difference between ( ) and { } when accessing elements of a cell array?

154 ビュー (過去 30 日間)
Minh Tran
Minh Tran 2018 年 9 月 18 日
コメント済み: Minh Tran 2018 年 9 月 19 日
There are two cell arrays that I'd like to consider:
a = {{'air'}, {'bee'}, {'cat'}} % Cell array of single-element cell arrays
b = {'air', 'bee', 'cat'} % Cell array of strings (aka. character arrays)
Access using the ( ) operator on `a` results in a cell:
>> a(1)
ans = {1 x 1 cell}
while access using ( ) operator on `b` results in something in single quotes:
>> b(1)
ans = 'air'
Access using the { } operator on `a` results in something in single quotes:
>> a{1}
ans = 'air'
and against `b` produces (with no quotes):
>> b{1}
ans = air
I have 2 questions.
1. What is the difference between the types of
{1 x 1} cell
'air'
air
that we see in the command window?
2. What do we call the ( ) access and the { } access and how does ( ) access differently from { }?

回答 (2 件)

James Tursa
James Tursa 2018 年 9 月 18 日
編集済み: James Tursa 2018 年 9 月 18 日
In general if A is a class whatever variable of some size, then A(1) will also be a class whatever variable of size 1x1. I.e., A(1) is just an element of A with the same class as A. E.g.,
If A is a double variable of size 1x3, then A(1) will be a double variable of size 1x1. If A is a cell array of size 1x3, then A(1) will be a cell array of size 1x1. If A is a struct array of size 1x3, then A(1) will be a struct array of size 1x1. Etc...
It follows then, that if A is a cell array, then A(1) is also a cell array with size 1x1.
The curly braces essentially dereference what is inside a cell array element. The result is the contents of the cells.
With that in mind:
A = {{'air'}, {'bee'}, {'cat'}} % Cell array of single-element cell arrays
A is a cell array. The elements of A happen to also be cell arrays.
A(1) is a 1x1 cell array that is the 1st element of A. That element happens to contain another cell array, namely {'air'}. The contents of that cell array is the character string 'air'. Conceptually (since the following syntax doesn't actually work in MATLAB),
A(1) is {{'air'}}
A(1){1} is {'air'}
A(1){1}{1} is 'air'
B = {'air', 'bee', 'cat'} % Cell array of strings (aka. character arrays)
B is a cell array. The elements of B happen to be character strings.
B(1) is a 1x1 cell array that is the 1st element of B. That element happens to contain the character string 'air'. Conceptually (since the following syntax doesn't actually work in MATLAB),
B(1) is {'air'}
B(1){1} is 'air'
The "conceptually" qualifier above is because you can't string together the ( ) and { } indexing like I did in MATLAB. You would need to separate that indexing into multiple statements to get it to work. E.g. this
x = A(1){1}{1} <-- not supported by MATLAB
would need to be something like this instead
temp = A(1)
x = temp{1}{1}
  4 件のコメント
Minh Tran
Minh Tran 2018 年 9 月 18 日
編集済み: James Tursa 2018 年 9 月 18 日
A1 = [1 2 3; 4 5 6;]; % Container is a `regular matrix` so the return type of A1(1) is a regular matrix (of size 1x1 in this case)
A2 = {1 2 3; 4 5 6}; % Container is a `cell array` so the return type of A2(1) is a cell array of size 1x1. A2(1,:) would refer to a 1x3 cell array whose elements are 1x1 `regular matrices`.
A3 = {{1} {2} {3}; {4} {5} {6}}; % Like A2, A3(1) refers to a cell array but each element is another cell array.
Does that sound right?
James Tursa
James Tursa 2018 年 9 月 18 日
Yes, you have it right.

サインインしてコメントする。


Image Analyst
Image Analyst 2018 年 9 月 18 日
a is a cell array where each cell contains a single cell.
b is a cell array where each cell contains a string (character vector).
Have you read the FAQ on cell arrays? https://matlab.wikia.com/wiki/FAQ#What_is_a_cell_array.3F
I think you should have a pretty good intuitive feel for cells and cell arrays after reading that.

カテゴリ

Help Center および File ExchangeData Type Identification についてさらに検索

製品


リリース

R2007a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by