
- •Matlab r2013a стр. 225
- •Continue Long Statements on Multiple Lines
- •Creating and Concatenating Matrices
- •Overview
- •Constructing a Simple Matrix
- •Entering Signed Numbers
- •Specialized Matrix Functions
- •Examples
- •Concatenating Matrices
- •Keeping Matrices Rectangular
- •Matrix Concatenation Functions
- •Examples
- •Generating a Numeric Sequence
- •The Colon Operator
- •Using the Colon Operator with a Step Value
- •Matrix Indexing
- •Accessing Single Elements
- •Linear Indexing
- •Functions That Control Indexing Style
- •Accessing Multiple Elements
- •Nonconsecutive Elements
- •The end Keyword
- •Specifying All Elements of a Row or Column
- •Using Logicals in Array Indexing
- •Logical Indexing – Example 1
- •Logical Indexing – Example 2
- •Logical Indexing with a Smaller Array
- •Single-Colon Indexing with Different Array Types
- •Indexing on Assignment
- •Arithmetic Operators
- •Arithmetic Operators and Arrays
- •Operator Precedence
- •Precedence of and and or Operators
- •Overriding Default Precedence
- •Relational Operators and Arrays
- •Relational Operators and Empty Arrays
- •Overview of the Logical Class
- •Logical Operators
- •Element-Wise Operators and Functions
- •Short-Circuit Operators
- •Precedence of and and or Operators
- •Symbol Reference
- •Asterisk — *
- •Filename Wildcard
- •Function Handle Constructor
- •Class Folder Designator
- •Line Continuation
- •Dynamic Structure Fields
- •Exclamation Point — !
- •Semicolon — ;
- •Array Row Separator
- •Output Suppression
- •Command or Statement Separator
- •Single Quotes — ' '
- •Square Brackets — [ ]
- •Fundamental matlab Classes
- •More About
- •Overview of Numeric Classes
- •Integers
- •Integer Classes
- •Creating Integer Data
- •Arithmetic Operations on Integer Classes
- •Largest and Smallest Values for Integer Classes
- •Integer Functions
- •Floating-Point Numbers
- •Double-Precision Floating Point
- •Single-Precision Floating Point
- •Creating Floating-Point Data
- •Creating Double-Precision Data
- •Creating Single-Precision Data
- •Arithmetic Operations on Floating-Point Numbers
- •Double-Precision Operations
- •Single-Precision Operations
- •Largest and Smallest Values for Floating-Point Classes
- •Largest and Smallest Double-Precision Values
- •Largest and Smallest Single-Precision Values
- •Accuracy of Floating-Point Data
- •Double-Precision Accuracy
- •Single-Precision Accuracy
- •Avoiding Common Problems with Floating-Point Arithmetic
- •Example 1 — Round-Off or What You Get Is Not What You Expect
- •Example 2 — Catastrophic Cancellation
- •Example 3 — Floating-Point Operations and Linear Algebra
- •Floating-Point Functions
- •Creating a Rectangular Character Array
- •Combining Strings Vertically
- •Combining Strings Horizontally
- •Identifying Characters in a String
- •Working with Space Characters
- •Expanding Character Arrays
- •String Comparisons
- •Comparing Strings for Equality
- •Comparing for Equality Using Operators
- •Categorizing Characters Within a String
- •Create a Structure Array
- •Access Data in a Structure Array
- •Concatenate Structures
- •Generate Field Names from Variables
- •Access Data in Nested Structures
- •Access Elements of a Nonscalar Struct Array
- •Create a Cell Array
- •Access Data in a Cell Array
- •Add Cells to a Cell Array
- •Delete Data from a Cell Array
- •Combine Cell Arrays
- •Pass Contents of Cell Arrays to Functions
- •Multilevel Indexing to Access Parts of Cells
- •Related Examples
- •What Is a Function Handle?
- •Creating a Function Handle
- •Maximum Length of a Function Name
- •The Role of Scope, Precedence, and Overloading When Creating a Function Handle
- •Obtaining Permissions from Class Methods
- •Example
- •Using Function Handles for Anonymous Functions
- •Arrays of Function Handles
- •Calling a Function Using Its Handle
- •Calling Syntax
- •Calling a Function with Multiple Outputs
- •Returning a Handle for Use Outside of a Function File
- •Example — Using Function Handles in Optimization
- •Preserving Data from the Workspace
- •Preserving Data with Anonymous Functions
- •Preserving Data with Nested Functions
- •Loading a Saved Handle to a Nested Function
- •Applications of Function Handles
- •Example of Passing a Function Handle
- •Pass a Function to Another Function
- •Example 1 — Run integral on Varying Functions
- •Example 2 — Run integral on Anonymous Functions
- •Example 3 — Compare integral Results on Different Functions
- •Capture Data Values For Later Use By a Function
- •Example 1 — Constructing a Function Handle that Preserves Its Variables
- •Example 2 — Varying Data Values Stored in a Function Handle
- •Example 3 — You Cannot Vary Data in a Handle to an Anonymous Function
- •Call Functions Outside of Their Normal Scope
- •Save the Handle in a mat-File for Use in a Later matlab Session
- •Parameterizing Functions
- •Overview
- •Parameterizing Using Nested Functions
- •Parameterizing Using Anonymous Functions
- •See Also
- •More About
- •Saving and Loading Function Handles
- •Invalid or Obsolete Function Handles
- •Advanced Operations on Function Handles
- •Examining a Function Handle
- •Converting to and from a String
- •Converting a String to a Function Handle
- •Converting a Function Handle to a String
- •Comparing Function Handles
- •Comparing Handles Constructed from a Named Function
- •Comparing Handles to Anonymous Functions
- •Comparing Handles to Nested Functions
- •Comparing Handles Saved to a mat-File
- •Overview of the Map Data Structure
- •Description of the Map Class
- •Properties of the Map Class
- •Methods of the Map Class
- •Creating a Map Object
- •Constructing an Empty Map Object
- •Constructing An Initialized Map Object
- •Combining Map Objects
- •Examining the Contents of the Map
- •Reading and Writing Using a Key Index
- •Reading From the Map
- •Adding Key/Value Pairs
- •Building a Map with Concatenation
- •Modifying Keys and Values in Map
- •Removing Keys and Values from the Map
- •Modifying Values
- •Modifying Keys
- •Modifying a Copy of the Map
- •Mapping to Different Value Types
- •Mapping to a Structure Array
- •Mapping to a Cell Array
R2013a>MATLAB>Language Fundamentals>Data Types>Cell Arrays
Multilevel Indexing to Access Parts of Cells
This example explains techniques for accessing data in arrays stored within cells of cell arrays. To run the code in this example, create a sample cell array:
myNum = [1, 2, 3];
myCell = {'one', 'two'};
myStruct.Field1 = ones(3);
myStruct.Field2 = 5*ones(5);
C = {myNum, 100*myNum;
myCell, myStruct};
Access the complete contents of a particular cell using curly braces, {}. For example,
C{1,2} % Содержимое ячейки (1,2) массива С.
returns the numeric vector from that cell:
ans =
100 200 300 (содержимое-числа ячейки (1,2) массива С; если содержимое велико, оно сокращается до отображения типа и структуры данных, например, ans=[200x200 double])
ДОПОЛНЕНИЕ. Команда
C(1,2)
дает ячейку (1,2) в массиве C:
ans =
[1x3 double] (указывается тип массива -числовой - и его структура - вектор-строка; не путать с сокращенным отображением данных) (Конец ДОПОЛНЕНИЯ)
Access part of the contents of a cell by appending indices, using syntax that matches the data type of the contents. For example:
Enclose numeric indices in curly braces (в оригинале - smooth parentheses). For example, C{1,1} returns the 1-by-3 numeric vector, [1, 2, 3] (точный MATLAB-ответ: ans = 1 2 3). Access the second element of that vector with the syntax
C{1,1}(1,2) % {1,1} - указание на содержимое ячейки (1,1) массива C; (1,2) - указание на элемент (1,2) в C{1,1}.
which returns
ans =
2 (элемент (1,2) массива C{1,1})
ДОПОЛНЕНИЕ. Команда
C{1,1}{1,2}
неверна, так как {1,2} указывает на содержимое ячейки (1,2), в то время как C{1,1} - числовой массив, не содержащий ячеек. (Конец
ДОПОЛНЕНИЯ)
Enclose cell array indices in smooth parentheses (в оригинале - curly braces). For example, C(2,1) returns the cell array {'one', 'two'}(точный MATLAB-ответ: ans = {1x2 cell} - массив-вектор-строка ячеек). Access the contents of the second cell within that cell array with the syntax
C{2,1}{1,2} % {2,1} - указание на содержимое ячейки (2,1) массива C; {1,2} - указание на содержимое ячейки (1,2) в C{2,1}.
which returns
ans =
two
ДОПОЛНЕНИЕ. Команда
C{2,1}(1,2) % (1,2) - указание на элемент (1,2) в C{2,1}.
дает ячейку (1,2) в C{2,1}:
ans =
'two' (Конец ДОПОЛНЕНИЯ)
Refer to fields of a struct array with dot notation, and index into the array as described for numeric and cell arrays. For example, C{2,2} returns a structure array (точный MATLAB-ответ - содержимое элемента (2,2) массива C, т.е. содержимое полей структуры myStruct:
ans =
Field1: [3x3 double]
Field2: [5x5 double]
где показано сокращеное указание на искомое содержимое (не путать с аналогичным по форме указанием типа и структуры массива в
MATLAB-ответе на запрос по ячейке)
where Field2 contains a 5-by-5 numeric array of fives. Access the element in the fifth row and first column of that field with the syntax
C{2,2}.Field2(5,1) % (5,1) - указание на элемент (5,1) массива данных поля Field2.
which returns
ans =
5 (ответ верен, потому что запрос C{2,2}.Field2(5,1) относился к элементу (5,1) содержимого [5x5 double] как сокращенного отображения действительного числового массива 5х5 в поле Field2 структуры myStruct)
ДОПОЛНЕНИЕ. Команда
C(2,2).Field2(5,1)
неверна, так как (5,1) - указание на элемент (5,1) массива данных поля Field2, в то время как (2,2)- указание на ячейку (т.е. на её тип и структуру - [1x2 struct] ), но не на её содержание. (Конец ДОПОЛНЕНИЯ)
You can nest any number of cell and structure arrays. For example, add nested cells and structures to C.
C{2,1}{2,2} = {pi, eps};
C{2,2}.Field3 = struct('NestedField1', rand(3), ...
'NestedField2', magic(4), ...
'NestedField3', {{'text'; 'more text'}} );
%{
s = struct(field,value) creates a structure array with the specified field and values. If value is a cell array, then s is a structure array with the same dimensions as value. Each element of s contains the corresponding element of value. For example, s = struct('f',{'a','b'}) returns s(1).f= 'a' and s(2).f = 'b'. Для сохранения структуры myStruct массив {'text'; 'more text'} помещен в одну ячейку-скаляр {{'text'; 'more text'}}. При этом C{2,2}.Field3.NestedField3 становится содержимым ячейки-скаляра в виде массива-вектора-столбца из двух ячеек.
%}
These assignment statements access parts of the new data:
copy_pi = C{2,1}{2,2}{1,1}
part_magic = C{2,2}.Field3.NestedField2(1:2,1:2)
nested_cell = C{2,2}.Field3.NestedField3{2,1} % {2,1} - указание на содержимое ячейки (2,1) массива C{2,2}.Field3.NestedField3.
MATLAB® displays:
copy_pi =
3.1416
part_magic =
16 2
5 11
nested_cell =
more text