annotate doc/interpreter/container.txi @ 6837:7eefeed173ea

[project @ 2007-08-27 20:20:55 by dbateman]
author dbateman
date Mon, 27 Aug 2007 20:20:55 +0000
parents 083721ae3dfa
children 40ad39648884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6778
083721ae3dfa [project @ 2007-07-18 17:03:10 by jwe]
jwe
parents: 6623
diff changeset
1 @c Copyright (C) 1996, 1997, 2007 John W. Eaton
3439
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
2 @c This is part of the Octave manual.
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
3 @c For copying conditions, see the file gpl.texi.
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
4
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
5 @node Data Containers
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
6 @chapter Data Containers
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
7 @cindex containers
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
8
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
9 Octave includes support for two different mechanaisms to contain
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
10 arbitrary data types in the same variable. Structures, which are C-like,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
11 and are indexed with named fields, and cell arrays, where each element
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
12 of the array can have a different data type and or shape.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
13
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
14 @menu
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
15 * Data Structures::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
16 * Cell Arrays::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
17 * Comma Separated Lists::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
18 @end menu
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
19
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
20 @node Data Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
21 @section Data Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
22 @cindex structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
23 @cindex data structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
24
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
25 Octave includes support for organizing data in structures. The current
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
26 implementation uses an associative array with indices limited to
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
27 strings, but the syntax is more like C-style structures. Here are some
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
28 examples of using data structures in Octave.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
29
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
30 Elements of structures can be of any value type. For example, the three
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
31 expressions
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
32
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
33 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
34 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
35 x.a = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
36 x.b = [1, 2; 3, 4]
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
37 x.c = "string"
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
38 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
39 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
40
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
41 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
42 create a structure with three elements. To print the value of the
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
43 structure, you can type its name, just as for any other variable:
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
44
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
45 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
46 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
47 octave:2> x
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
48 x =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
49 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
50 a = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
51 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
52
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
53 1 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
54 3 4
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
55
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
56 c = string
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
57 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
58 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
59 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
60
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
61 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
62 Note that Octave may print the elements in any order.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
63
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
64 Structures may be copied.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
65
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
66 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
67 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
68 octave:1> y = x
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
69 y =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
70 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
71 a = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
72 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
73
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
74 1 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
75 3 4
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
76
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
77 c = string
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
78 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
79 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
80 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
81
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
82 Since structures are themselves values, structure elements may reference
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
83 other structures. The following statements change the value of the
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
84 element @code{b} of the structure @code{x} to be a data structure
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
85 containing the single element @code{d}, which has a value of 3.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
86
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
87 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
88 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
89 octave:1> x.b.d = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
90 x.b.d = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
91 octave:2> x.b
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
92 ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
93 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
94 d = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
95 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
96 octave:3> x
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
97 x =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
98 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
99 a = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
100 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
101 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
102 d = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
103 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
104
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
105 c = string
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
106 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
107 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
108 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
109
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
110 Note that when Octave prints the value of a structure that contains
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
111 other structures, only a few levels are displayed. For example,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
112
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
113 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
114 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
115 octave:1> a.b.c.d.e = 1;
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
116 octave:2> a
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
117 a =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
118 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
119 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
120 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
121 c =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
122 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
123 d: 1x1 struct
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
124 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
125 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
126 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
127 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
128 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
129
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
130 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
131 This prevents long and confusing output from large deeply nested
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
132 structures.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
133
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
134 @DOCSTRING(struct_levels_to_print)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
135
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
136 Functions can return structures. For example, the following function
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
137 separates the real and complex parts of a matrix and stores them in two
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
138 elements of the same structure variable.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
139
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
140 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
141 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
142 octave:1> function y = f (x)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
143 > y.re = real (x);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
144 > y.im = imag (x);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
145 > endfunction
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
146 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
147 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
148
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
149 When called with a complex-valued argument, @code{f} returns the data
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
150 structure containing the real and imaginary parts of the original
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
151 function argument.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
152
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
153 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
154 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
155 octave:2> f (rand (2) + rand (2) * I)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
156 ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
157 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
158 im =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
159
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
160 0.26475 0.14828
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
161 0.18436 0.83669
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
162
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
163 re =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
164
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
165 0.040239 0.242160
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
166 0.238081 0.402523
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
167 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
168 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
169 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
170
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
171 Function return lists can include structure elements, and they may be
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
172 indexed like any other variable. For example,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
173
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
174 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
175 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
176 octave:1> [ x.u, x.s(2:3,2:3), x.v ] = svd ([1, 2; 3, 4])
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
177 x.u =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
178
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
179 -0.40455 -0.91451
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
180 -0.91451 0.40455
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
181
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
182 x.s =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
183
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
184 0.00000 0.00000 0.00000
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
185 0.00000 5.46499 0.00000
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
186 0.00000 0.00000 0.36597
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
187
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
188 x.v =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
189
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
190 -0.57605 0.81742
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
191 -0.81742 -0.57605
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
192 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
193 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
194
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
195 It is also possible to cycle through all the elements of a structure in
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
196 a loop, using a special form of the @code{for} statement
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
197 (@pxref{The for Statement})
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
198
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
199 @menu
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
200 * Structure Arrays::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
201 * Creating Structures::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
202 * Manipulating Structures::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
203 @end menu
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
204
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
205 @node Structure Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
206 @subsection Structure Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
207
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
208 A structure array is a particular instance of a structure, where each of
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
209 the fields of the structure is represented by a cell array. Each of
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
210 these cell arrays has the same dimensions. An example of the creation of
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
211 a structure array is
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
212
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
213 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
214 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
215 x(1).a = "string1"
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
216 x(2).a = "string2"
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
217 x(1).b = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
218 x(2).b = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
219 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
220 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
221
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
222 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
223 which creates a 2-by-1 structure array with two fields. As previously,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
224 to print the value of the structure array, you can type its name:
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
225
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
226 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
227 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
228 octave:2> x
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
229 x =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
230 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
231 a =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
232
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
233 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
234 [1] = string1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
235 [2] = string2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
236 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
237
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
238 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
239
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
240 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
241 [1] = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
242 [2] = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
243 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
244
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
245 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
246 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
247 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
248
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
249 Individual elements of the structure array can be returned by indexing
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
250 the variable like @code{@var{x} (1)}, which returns a structure with the
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
251 two fields like
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
252
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
253 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
254 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
255 octave:2> x(1)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
256 ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
257 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
258 a = string1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
259 b = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
260 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
261 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
262 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
263
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
264 Furthermore, the structure array can return a comma seperated list
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
265 (@pxref{Comma Separated Lists}), if indexed by one of itself field
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
266 names. For example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
267
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
268 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
269 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
270 octave:3> x.a
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
271 ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
272
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
273 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
274 [1] = string1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
275 [2] = string2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
276 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
277 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
278 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
279
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
280 The function @code{size} with return the size of the structure. For
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
281 the example above
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
282
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
283 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
284 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
285 octave:4> size(x)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
286 ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
287
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
288 1 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
289 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
290 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
291
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
292 Elements can be deleted from a structure array in a similar manner to a
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
293 numerial array, by assignment the elements to an empty matrix. For
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
294 example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
295
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
296 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
297 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
298 in = struct ('call1', @{x, Inf, 'last'@}, 'call2', @{x, Inf, 'first'@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
299 in (1, :) = []
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
300 @result{} in =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
301 {
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
302 call1 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
303
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
304 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
305 [1] = Inf
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
306 [2] = last
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
307 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
308
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
309 call2 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
310
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
311 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
312 [1] = Inf
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
313 [2] = first
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
314 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
315
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
316 }
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
317 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
318 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
319
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
320 @node Creating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
321 @subsection Creating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
322
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
323 As well as indexing a structure with ".", Octave can create a structure
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
324 with the @code{struct} command. @code{struct} takes pairs of arguments,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
325 where the first argument in the pair is the fieldname to include in the
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
326 structure and the second is a scalar or cell array, representing the
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
327 values to include in the structure or structure array. For example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
328
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
329 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
330 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
331 struct ('field1', 1, 'field2', 2)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
332 @result{} ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
333 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
334 field1 = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
335 field2 = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
336 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
337 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
338 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
339
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
340 If the values passed to @code{struct} are a mix of scalar and cell
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
341 arrays, then the scalar arguments are expanded to create a
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
342 structure array with a consistent dimension. For example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
343
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
344 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
345 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
346 struct ('field1', @{1, 'one'@}, 'field2', @{2, 'two'@}, 'field3', 3);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
347 @result{} ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
348 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
349 field1 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
350
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
351 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
352 [1] = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
353 [2] = one
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
354 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
355
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
356 field2 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
357
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
358 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
359 [1] = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
360 [2] = two
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
361 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
362
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
363 field3 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
364
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
365 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
366 [1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
367 [2] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
368 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
369
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
370 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
371 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
372 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
373
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
374 @DOCSTRING(struct)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
375
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
376 @DOCSTRING(isstruct)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
377
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
378 Additional functions that can manipulate the fields of a structure are
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
379 listed below.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
380
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
381 @DOCSTRING(rmfield)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
382
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
383 @DOCSTRING(setfield)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
384
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
385 @DOCSTRING(orderfields)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
386
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
387 @node Manipulating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
388 @subsection Manipulating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
389
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
390 Other functions that can manipulate the fields of a structure are given below.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
391
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
392 @DOCSTRING(fieldnames)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
393
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
394 @DOCSTRING(isfield)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
395
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
396 @DOCSTRING(getfield)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
397
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
398 @DOCSTRING(struct2cell)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
399
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
400 @DOCSTRING(substruct)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
401
6517
a1ec359aef37 [project @ 2007-04-11 15:14:48 by jwe]
jwe
parents: 6516
diff changeset
402 @node Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
403 @section Cell Arrays
3439
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
404 @cindex cell arrays
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
405
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
406 It can be both necessary and convenient to store several variables of
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
407 different size or type in one variable. A cell array is a container
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
408 class able to do just that. In general cell arrays work just like
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
409 @math{N}-dimensional arrays, with the exception of the use of @samp{@{}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
410 and @samp{@}} as allocation and indexing operators.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
411
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
412 As an example, the following code creates a cell array containing a
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
413 string and a 2-by-2 random matrix
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
414
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
415 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
416 c = @{"a string", rand(2, 2)@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
417 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
418
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
419 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
420 And a cell array can be indexed with the @{ and @} operators, so the
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
421 variable created in the previous example can be indexed like this
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
422
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
423 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
424 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
425 c@{1@}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
426 @result{} ans = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
427 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
428 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
429
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
430 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
431 As with numerical arrays several elements of a cell array can be
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
432 extracted by indexing with a vector of indexes
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
433
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
434 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
435 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
436 c@{1:2@}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
437 @result{} ans =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
438
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
439 (,
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
440 [1] = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
441 [2] =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
442
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
443 0.593993 0.627732
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
444 0.377037 0.033643
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
445
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
446 ,)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
447 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
448 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
449
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
450 The indexing operators can also be used to insert or overwrite elements
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
451 of a cell array. The following code inserts the scalar 3 on the
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
452 third place of the previously created cell array
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
453
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
454 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
455 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
456 c@{3@} = 3
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
457 @result{} c =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
458
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
459 @{
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
460 [1,1] = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
461 [1,2] =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
462
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
463 0.593993 0.627732
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
464 0.377037 0.033643
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
465
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
466 [1,3] = 3
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
467 @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
468 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
469 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
470
6516
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
471 @menu
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
472 * Creating Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
473 * Indexing Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
474 * Cell Arrays of Strings::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
475 * Processing Data in Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
476 @end menu
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
477
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
478 @node Creating Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
479 @subsection Creating Cell Array
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
480
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
481 The introductory example showed how to create a cell array containing
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
482 currently available variables. In many situations, however, it is useful
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
483 to create a cell array and then fill it with data.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
484
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
485 The @code{cell} function returns a cell array of a given size, containing
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
486 empty matrices. This function works very similar to the @code{zeros}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
487 function for creating new numerical arrays. The following example creates
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
488 a 2-by-2 cell array containing empty matrices
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
489
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
490 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
491 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
492 c = cell(2,2)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
493 @result{} c =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
494
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
495 @{
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
496 [1,1] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
497 [2,1] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
498 [1,2] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
499 [2,2] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
500 @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
501 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
502 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
503
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
504 Just like numerical arrays, cell arrays can be multidimensional. The
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
505 @code{cell} function accepts any number of positive integers to describe
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
506 the size of the returned cell array. It is also possible to set the size
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
507 of the cell array through a vector of positive integers. In the
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
508 following example two cell arrays of equal size is created, and the size
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
509 of the first one is displayed
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
510
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
511 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
512 c1 = cell(3, 4, 5);
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
513 c2 = cell( [3, 4, 5] );
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
514 size(c1)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
515 @result{} ans =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
516 3 4 5
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
517 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
518
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
519 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
520 As can be seen, the @code{size} function also work for cell arrays. As
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
521 do the other functions describing the size of an object, such as
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
522 @code{length}, @code{numel}, @code{rows}, and @code{columns}.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
523
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
524 An alternative to creating empty cell arrays, and then filling them, it
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
525 is possible to convert numerical arrays into cell arrays using the
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
526 @code{num2cell} and @code{mat2cell} functions.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
527
3439
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
528 @DOCSTRING(cell)
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
529
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
530 @DOCSTRING(iscell)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
531
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
532 @DOCSTRING(num2cell)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
533
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
534 @DOCSTRING(mat2cell)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
535
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
536 @node Indexing Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
537 @subsection Indexing Cell Arrays
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
538
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
539 As shown in the introductory example elements can be inserted from cell
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
540 arrays using the @samp{@{} and @samp{@}} operators. Besides the change
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
541 of operators, indexing works for cell arrays like for multidimensional
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
542 arrays. As an example, all the rows of the first and third column of a
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
543 cell array can be set to @code{0} with the following code
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
544
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
545 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
546 c@{:, [1, 3]@} = 0;
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
547 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
548
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
549 Accessing values in a cell array is, however, different from the same
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
550 operation for numerical arrays. Accessing a single element of a cell
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
551 array is very similar to numerical arrays, for example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
552
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
553 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
554 element = c@{1, 2@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
555 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
556
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
557 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
558 This will, however, @emph{not} work when accessing multiple elements of
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
559 a cell array, because it might not be possible to represent all elements
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
560 with a single variable as is the case with numerical arrays.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
561
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
562 Accessing multiple elements of a cell array with the @samp{@{} and
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
563 @samp{@}} operators will result in a comma-separated list (@pxref{Comma
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
564 Separated Lists}) of all the requested elements as discussed later.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
565
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
566 One distinction between @samp{@{} and @samp{(} to index cell arrays is
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
567 in the deletion of elements from the cell array. In a similar manner to
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
568 a numerical array the @samp{()} operator can be used to delete elements
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
569 from the cell array. The @samp{@{@}} operator however will remove the
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
570 elements of the cell array, but not delete the space for them. For example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
571
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
572 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
573 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
574 x = {'1', '2'; '3', '4'};
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
575 x{1, :} = []
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
576 @result x =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
577 {
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
578 [1,1] = [](0x0)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
579 [2,1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
580 [1,2] = [](0x0)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
581 [2,2] = 4
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
582 }
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
583
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
584 x(1, :) = []
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
585 @result {} x =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
586 {
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
587 [1,1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
588 [1,2] = 4
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
589 }
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
590 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
591 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
592
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
593 @node Cell Arrays of Strings
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
594 @subsection Cell Arrays of Strings
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
595
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
596 One common use of cell arrays is to store multiple strings in the same
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
597 variable. It is possible to store multiple strings in a character matrix
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
598 by letting each row be a string. This, however, introduces the problem
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
599 that all strings must be of equal length. Therefore it is recommended to
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
600 use cell arrays to store multiple strings. If, however, the character
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
601 matrix representation is required for an operation, it can be converted
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
602 to a cell array of strings using the @code{cellstr} function
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
603
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
604 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
605 a = ["hello"; "world"];
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
606 c = cellstr (a)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
607 @result{} c =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
608 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
609 [1,1] = hello
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
610 [2,1] = world
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
611 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
612 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
613
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
614 One further advantage of using cell arrays to store multiple strings, is
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
615 that most functions for string manipulations included with Octave
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
616 supports this representation. As an example, it is possible to compare
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
617 one string with many others using the @code{strcmp} function. If one of
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
618 the arguments to this function is a string and the other is a cell array
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
619 of strings, each element of the cell array will be compared the string
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
620 argument,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
621
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
622 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
623 c = @{"hello", "world"@};
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
624 strcmp ("hello", c)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
625 @result{} ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
626 1 0
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
627 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
628
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
629 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
630 The following functions for string manipulation support cell arrays of
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
631 strings, @code{strcmp}, @code{strcmpi}, @code{strncmp}, @code{strncmpi},
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
632 @code{str2double}, @code{str2mat}, @code{strappend}, @code{strtrunc},
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
633 @code{strvcat}, @code{strfind}, and @code{strmatch}.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
634
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
635 @DOCSTRING(cellstr)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
636
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
637 @DOCSTRING(iscellstr)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
638
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
639 @DOCSTRING(cellidx)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
640
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
641 @node Processing Data in Cell Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
642 @subsection Processing Data in Cell Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
643
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
644 Data that is stored in a cell array can be processed in several ways
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
645 depending on the actual data. The most simple way to process that data
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
646 is to iterate through it using one or more @code{for} loops. The same
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
647 idea can be implemented easier through the use of the @code{cellfun}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
648 function that calls a user specified function on all elements of a cell
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
649 array.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
650
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
651 @DOCSTRING(cellfun)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
652
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
653 An alternative is to convert the data to a different container, such as
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
654 a matrix or a data structure. Depending on the data this is possible
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
655 using the @code{cell2mat} and @code{cell2struct} functions.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
656
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
657 @DOCSTRING(cell2mat)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
658
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
659 @DOCSTRING(cell2struct)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
660
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
661 @node Comma Separated Lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
662 @section Comma Separated Lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
663 @cindex comma separated lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
664
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
665 Comma separated lists are the basic argument type to all Octave
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
666 functions. In the example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
667
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
668 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
669 max (@var{a}, @var{b})
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
670 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
671
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
672 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
673 @code{@var{a}, @var{b}} is a somma separated list. Comma separated lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
674 can appear on both the right and left hand side of an equation. For
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
675 example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
676
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
677 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
678 [@var{i}, @var{j}] = ceil (find (@var{x}, [], 'last'));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
679 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
680
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
681 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
682 where @code{@var{i}, @var{j}} is equally a comma separated list. Comma
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
683 separated lists can not be directly manipulated by the user. However,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
684 both structures are cell arrays can be converted into into comma
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
685 separated lists, which makes them useful to keep the input arguments and
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
686 return values of functions organized. Another example of where a comma
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
687 separated list can be used is in the creation of a new array. If all the
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
688 accessed elements of a cell array are scalars or column vectors, they
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
689 can be concatenated into a new column vector containing the elements, by
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
690 surrounding the list with @code{[} and @code{]} as in the following
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
691 example
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
692
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
693 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
694 a = @{1, [2, 3], 4@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
695 b = [a@{:@}]
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
696 @result{} b =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
697 1 2 3 4
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
698 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
699
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
700 It is also possible to pass the accessed elements directly to a
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
701 function. The list of elements from the cell array will be passed as an
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
702 argument list to a given function as if it is called with the elements as
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
703 arguments. The two calls to @code{printf} in the following example are
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
704 identical but the latter is more simple and handles more situations
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
705
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
706 @example
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
707 c = @{"GNU", "Octave", "is", "Free", "Software"@};
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
708 printf ("%s ", c@{1@}, c@{2@}, c@{3@}, c@{4@}, c@{5@});
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
709 @print{} GNU Octave is Free Software
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
710 printf ("%s ", c@{:@});
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
711 @print{} GNU Octave is Free Software
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
712 @end example
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
713
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
714 Just like it is possible to create a numerical array from selected
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
715 elements of a cell array, it is possible to create a new cell array
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
716 containing the selected elements. By surrounding the list with
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
717 @samp{@{} and @samp{@}} a new cell array will be created, like the
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
718 following example illustrates
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
719
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
720 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
721 a = @{1, rand(2, 2), "three"@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
722 b = @{ a@{ [1, 3] @} @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
723 @result{} b =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
724 @{
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
725 [1,1] = 1
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
726 [1,2] = three
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
727 @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
728 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
729
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
730 @noindent
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
731 This syntax is however a bit cumbersome, and since this is a common
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
732 operation, it is possible to achieve the same using the @samp{(}
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
733 and @samp{)} operators for indexing. When a cell array is indexed
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
734 using the @samp{(} and @samp{)} operators a new cell array containing
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
735 the selected elements. Using this syntax, the previous example can
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
736 be simplified into the following
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
737
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
738 @example
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
739 a = @{1, rand(2, 2), "three"@};
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
740 b = a( [1, 3] )
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
741 @result{} b =
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
742 @{
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
743 [1,1] = 1
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
744 [1,2] = three
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
745 @}
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
746 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
747
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
748 A comma separated list can equally appear on the left-hand side of an
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
749 assignment. An example is
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
750
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
751 @example
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
752 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
753 in @{1@} = ceil (rand (10, 1));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
754 in @{2@} = [];
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
755 in @{3@} = 'last';
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
756 in @{4@} = 'first';
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
757 out = cell (4, 1);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
758 [out@{1:2@}] = find (in@{1 : 3@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
759 [out@{3:4@}] = find (in@{[1, 2, 4]@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
760 @end group
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
761 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
762
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
763 Structures arrays can equally be used to create comma separated
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
764 lists. This is done by addresses one of the fields of a structure
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
765 array. For example
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
766
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
767 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
768 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
769 x = ceil (randn (10, 1));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
770 in = struct ('call1', @{x, Inf, 'last'@}, 'call2', @{x, Inf, 'first'@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
771 out = struct ('call1', cell (2, 1), 'call2', cell (2, 1));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
772 [out.call1] = find (in.call1);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
773 [out.call2] = find (in.call2);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
774 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
775 @end example