annotate doc/interpreter/container.txi @ 7031:120f3135952f

[project @ 2007-10-15 15:30:03 by jwe]
author jwe
date Mon, 15 Oct 2007 15:31:21 +0000
parents adf164b814b3
children 5bc08f9758e6
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
7018
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
2 @c
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
3 @c This file is part of Octave.
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
4 @c
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
5 @c Octave is free software; you can redistribute it and/or modify it
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
6 @c under the terms of the GNU General Public License as published by the
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
7 @c Free Software Foundation; either version 3 of the License, or (at
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
8 @c your option) any later version.
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
9 @c
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
10 @c Octave is distributed in the hope that it will be useful, but WITHOUT
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
11 @c ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
12 @c FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
13 @c for more details.
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
14 @c
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
15 @c You should have received a copy of the GNU General Public License
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
16 @c along with Octave; see the file COPYING. If not, see
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7001
diff changeset
17 @c <http://www.gnu.org/licenses/>.
3439
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
18
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
19 @node Data Containers
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
20 @chapter Data Containers
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
21 @cindex containers
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
22
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
23 Octave includes support for two different mechanisms to contain
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
24 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
25 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
26 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
27
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
28 @menu
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
29 * Data Structures::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
30 * Cell Arrays::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
31 * Comma Separated Lists::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
32 @end menu
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
33
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
34 @node Data Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
35 @section Data Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
36 @cindex structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
37 @cindex data structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
38
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
39 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
40 implementation uses an associative array with indices limited to
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
41 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
42 examples of using data structures in Octave.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
43
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
44 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
45 expressions
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
46
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
47 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
48 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
49 x.a = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
50 x.b = [1, 2; 3, 4]
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
51 x.c = "string"
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
52 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
53 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
54
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
55 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
56 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
57 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
58
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
59 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
60 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
61 octave:2> x
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
62 x =
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 a = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
65 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
66
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
67 1 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
68 3 4
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
69
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
70 c = string
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
71 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
72 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
73 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
74
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
75 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
76 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
77
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
78 Structures may be copied.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
79
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
80 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
81 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
82 octave:1> y = x
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
83 y =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
84 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
85 a = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
86 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
87
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
88 1 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
89 3 4
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
90
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
91 c = string
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
92 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
93 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
94 @end example
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 Since structures are themselves values, structure elements may reference
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
97 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
98 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
99 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
100
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
101 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
102 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
103 octave:1> x.b.d = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
104 x.b.d = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
105 octave:2> x.b
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
106 ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
107 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
108 d = 3
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 octave:3> x
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
111 x =
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 a = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
114 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
115 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
116 d = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
117 @}
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 c = string
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 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
122 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
123
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
124 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
125 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
126
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
127 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
128 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
129 octave:1> a.b.c.d.e = 1;
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
130 octave:2> a
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
131 a =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
132 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
133 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
134 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
135 c =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
136 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
137 d: 1x1 struct
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
138 @}
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 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
141 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
142 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
143
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
144 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
145 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
146 structures.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
147
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
148 @DOCSTRING(struct_levels_to_print)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
149
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
150 Functions can return structures. For example, the following function
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
151 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
152 elements of the same structure variable.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
153
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
154 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
155 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
156 octave:1> function y = f (x)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
157 > y.re = real (x);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
158 > y.im = imag (x);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
159 > endfunction
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
160 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
161 @end example
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 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
164 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
165 function argument.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
166
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
167 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
168 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
169 octave:2> f (rand (2) + rand (2) * I)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
170 ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
171 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
172 im =
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 0.26475 0.14828
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
175 0.18436 0.83669
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
176
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
177 re =
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.040239 0.242160
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
180 0.238081 0.402523
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 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
183 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
184
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
185 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
186 indexed like any other variable. For example,
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 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
189 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
190 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
191 x.u =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
192
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
193 -0.40455 -0.91451
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
194 -0.91451 0.40455
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
195
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
196 x.s =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
197
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
198 0.00000 0.00000 0.00000
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
199 0.00000 5.46499 0.00000
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
200 0.00000 0.00000 0.36597
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
201
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
202 x.v =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
203
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
204 -0.57605 0.81742
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
205 -0.81742 -0.57605
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
206 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
207 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
208
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
209 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
210 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
211 (@pxref{The for Statement})
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 @menu
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
214 * Structure Arrays::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
215 * Creating Structures::
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
216 * Manipulating Structures::
6863
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
217 * Processing Data in Structures::
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
218 @end menu
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
219
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
220 @node Structure Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
221 @subsection Structure Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
222
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
223 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
224 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
225 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
226 a structure array is
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
227
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
228 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
229 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
230 x(1).a = "string1"
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
231 x(2).a = "string2"
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
232 x(1).b = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
233 x(2).b = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
234 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
235 @end example
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 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
238 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
239 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
240
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
241 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
242 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
243 octave:2> x
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
244 x =
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 a =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
247
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 [1] = string1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
250 [2] = string2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
251 ,)
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 b =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
254
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
255 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
256 [1] = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
257 [2] = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
258 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
259
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 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
265 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
266 two fields like
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:2> x(1)
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 a = string1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
274 b = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
275 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
276 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
277 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
278
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
279 Furthermore, the structure array can return a comma separated list
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
280 (@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
281 names. For example
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:3> x.a
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 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
289 [1] = string1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
290 [2] = string2
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 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
293 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
294
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
295 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
296 the example above
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
297
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
298 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
299 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
300 octave:4> size(x)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
301 ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
302
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
303 1 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
304 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
305 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
306
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
307 Elements can be deleted from a structure array in a similar manner to a
7001
8b0cfeb06365 [project @ 2007-10-10 18:02:59 by jwe]
jwe
parents: 6939
diff changeset
308 numerical array, by assigning the elements to an empty matrix. For
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
309 example
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 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
312 @group
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
313 in = struct ("call1", @{x, Inf, "last"@},
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
314 "call2", @{x, Inf, "first"@});
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
315 in (1, :) = []
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
316 @result{} in =
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
317 @{
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
318 call1 =
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 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
321 [1] = Inf
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
322 [2] = last
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
323 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
324
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
325 call2 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
326
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
327 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
328 [1] = Inf
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
329 [2] = first
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
330 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
331
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
332 @}
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
333 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
334 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
335
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
336 @node Creating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
337 @subsection Creating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
338
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
339 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
340 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
341 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
342 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
343 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
344
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
345 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
346 @group
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
347 struct ("field1", 1, "field2", 2)
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
348 @result{} ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
349 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
350 field1 = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
351 field2 = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
352 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
353 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
354 @end example
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 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
357 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
358 structure array with a consistent dimension. For example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
359
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
360 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
361 @group
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
362 struct ("field1", @{1, "one"@}, "field2", @{2, "two"@},
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
363 "field3", 3)
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
364 @result{} ans =
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 field1 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
367
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 [1] = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
370 [2] = one
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
371 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
372
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
373 field2 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
374
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 [1] = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
377 [2] = two
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
378 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
379
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
380 field3 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
381
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 [1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
384 [2] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
385 ,)
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 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
388 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
389 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
390
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
391 @DOCSTRING(struct)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
392
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
393 @DOCSTRING(isstruct)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
394
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
395 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
396 listed below.
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(rmfield)
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(setfield)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
401
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
402 @DOCSTRING(orderfields)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
403
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
404 @node Manipulating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
405 @subsection Manipulating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
406
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
407 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
408
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
409 @DOCSTRING(fieldnames)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
410
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
411 @DOCSTRING(isfield)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
412
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
413 @DOCSTRING(getfield)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
414
6863
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
415 @DOCSTRING(substruct)
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
416
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
417 @node Processing Data in Structures
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
418 @subsection Processing Data in Structures
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
419
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
420 The simplest way to process data in a structure is within a @code{for}
6863
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
421 loop or othe means of iterating over the fields. A similar effect can be
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
422 achieved with the @code{structfun} function, where a user defined
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
423 function is applied to each field of the structure.
6863
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
424
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
425 @DOCSTRING(structfun)
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
426
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
427 Alternatively, to process the data in a structure, the structure might
6863
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
428 be converted to another type of container before being treated.
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
429
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
430 @DOCSTRING(struct2cell)
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
431
6517
a1ec359aef37 [project @ 2007-04-11 15:14:48 by jwe]
jwe
parents: 6516
diff changeset
432 @node Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
433 @section Cell Arrays
3439
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
434 @cindex cell arrays
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
435
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
436 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
437 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
438 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
439 @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
440 and @samp{@}} as allocation and indexing operators.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
441
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
442 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
443 string and a 2-by-2 random matrix
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
444
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
445 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
446 c = @{"a string", rand(2, 2)@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
447 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
448
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
449 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
450 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
451 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
452
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
453 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
454 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
455 c@{1@}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
456 @result{} ans = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
457 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
458 @end example
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 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
461 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
462 extracted by indexing with a vector of indexes
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
463
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
464 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
465 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
466 c@{1:2@}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
467 @result{} ans =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
468
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
469 (,
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
470 [1] = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
471 [2] =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
472
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
473 0.593993 0.627732
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
474 0.377037 0.033643
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
475
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
476 ,)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
477 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
478 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
479
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
480 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
481 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
482 third place of the previously created cell array
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
483
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
484 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
485 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
486 c@{3@} = 3
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
487 @result{} c =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
488
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 [1,1] = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
491 [1,2] =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
492
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
493 0.593993 0.627732
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
494 0.377037 0.033643
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,3] = 3
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
497 @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
498 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
499 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
500
6868
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
501 In general nested cell arrays are displayed hierarchically as above. In
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
502 some circumstances it makes sense to reference them by their index, and
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
503 this can be performed by the @code{celldisp} function.
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
504
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
505 @DOCSTRING(celldisp)
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
506
6516
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
507 @menu
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
508 * Creating Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
509 * Indexing Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
510 * Cell Arrays of Strings::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
511 * Processing Data in Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
512 @end menu
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
513
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
514 @node Creating Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
515 @subsection Creating Cell Array
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
516
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
517 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
518 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
519 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
520
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
521 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
522 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
523 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
524 a 2-by-2 cell array containing empty matrices
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
525
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
526 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
527 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
528 c = cell(2,2)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
529 @result{} c =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
530
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 [1,1] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
533 [2,1] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
534 [1,2] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
535 [2,2] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
536 @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
537 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
538 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
539
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
540 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
541 @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
542 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
543 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
544 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
545 of the first one is displayed
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
546
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
547 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
548 c1 = cell(3, 4, 5);
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
549 c2 = cell( [3, 4, 5] );
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
550 size(c1)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
551 @result{} ans =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
552 3 4 5
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
553 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
554
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
555 @noindent
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
556 As can be seen, the @code{size} function also works for cell arrays. As
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
557 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
558 @code{length}, @code{numel}, @code{rows}, and @code{columns}.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
559
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
560 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
561 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
562 @code{num2cell} and @code{mat2cell} functions.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
563
3439
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
564 @DOCSTRING(cell)
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
565
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
566 @DOCSTRING(iscell)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
567
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
568 @DOCSTRING(num2cell)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
569
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
570 @DOCSTRING(mat2cell)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
571
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
572 @node Indexing Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
573 @subsection Indexing Cell Arrays
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
574
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
575 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
576 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
577 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
578 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
579 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
580
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
581 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
582 c@{:, [1, 3]@} = 0;
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
583 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
584
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
585 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
586 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
587 array is very similar to numerical arrays, for example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
588
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
589 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
590 element = c@{1, 2@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
591 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
592
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
593 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
594 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
595 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
596 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
597
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
598 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
599 @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
600 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
601
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
602 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
603 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
604 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
605 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
606 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
607
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
608 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
609 @group
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
610 x = @{"1", "2"; "3", "4"@};
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
611 x@{1, :@} = []
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
612 @result{} x =
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
613 @{
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
614 [1,1] = [](0x0)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
615 [2,1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
616 [1,2] = [](0x0)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
617 [2,2] = 4
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
618 @}
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
619
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
620 x(1, :) = []
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
621 @result{} x =
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
622 @{
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
623 [1,1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
624 [1,2] = 4
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
625 @}
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
626 @end group
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 @node Cell Arrays of Strings
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
630 @subsection Cell Arrays of Strings
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
631
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
632 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
633 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
634 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
635 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
636 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
637 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
638 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
639
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
640 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
641 a = ["hello"; "world"];
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
642 c = cellstr (a)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
643 @result{} c =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
644 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
645 [1,1] = hello
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
646 [2,1] = world
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
647 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
648 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
649
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
650 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
651 that most functions for string manipulations included with Octave
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
652 support this representation. As an example, it is possible to compare
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
653 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
654 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
655 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
656 argument,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
657
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
658 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
659 c = @{"hello", "world"@};
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
660 strcmp ("hello", c)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
661 @result{} ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
662 1 0
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
663 @end example
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 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
666 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
667 strings, @code{strcmp}, @code{strcmpi}, @code{strncmp}, @code{strncmpi},
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
668 @code{str2double}, @code{str2mat}, @code{strappend}, @code{strtrunc},
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
669 @code{strvcat}, @code{strfind}, and @code{strmatch}.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
670
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
671 @DOCSTRING(cellstr)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
672
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
673 @DOCSTRING(iscellstr)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
674
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
675 @DOCSTRING(cellidx)
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 @node Processing Data in Cell Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
678 @subsection Processing Data in Cell Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
679
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
680 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
681 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
682 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
683 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
684 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
685 array.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
686
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
687 @DOCSTRING(cellfun)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
688
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
689 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
690 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
691 using the @code{cell2mat} and @code{cell2struct} functions.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
692
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
693 @DOCSTRING(cell2mat)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
694
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
695 @DOCSTRING(cell2struct)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
696
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
697 @node Comma Separated Lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
698 @section Comma Separated Lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
699 @cindex comma separated lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
700
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
701 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
702 functions. In the example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
703
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
704 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
705 max (@var{a}, @var{b})
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
706 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
707
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
708 @noindent
7001
8b0cfeb06365 [project @ 2007-10-10 18:02:59 by jwe]
jwe
parents: 6939
diff changeset
709 @code{@var{a}, @var{b}} is a comma separated list. Comma separated lists
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
710 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
711 example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
712
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
713 @example
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
714 [@var{i}, @var{j}] = ceil (find (@var{x}, [], "last"));
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
715 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
716
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
717 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
718 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
719 separated lists can not be directly manipulated by the user. However,
7001
8b0cfeb06365 [project @ 2007-10-10 18:02:59 by jwe]
jwe
parents: 6939
diff changeset
720 both structures are cell arrays can be converted into comma
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
721 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
722 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
723 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
724 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
725 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
726 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
727 example
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
728
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
729 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
730 a = @{1, [2, 3], 4@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
731 b = [a@{:@}]
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
732 @result{} b =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
733 1 2 3 4
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
734 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
735
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
736 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
737 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
738 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
739 arguments. The two calls to @code{printf} in the following example are
7001
8b0cfeb06365 [project @ 2007-10-10 18:02:59 by jwe]
jwe
parents: 6939
diff changeset
740 identical but the latter is simpler and handles more situations
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
741
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
742 @example
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
743 c = @{"GNU", "Octave", "is", "Free", "Software"@};
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
744 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
745 @print{} GNU Octave is Free Software
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
746 printf ("%s ", c@{:@});
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
747 @print{} GNU Octave is Free Software
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
748 @end example
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
749
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
750 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
751 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
752 containing the selected elements. By surrounding the list with
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
753 @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
754 following example illustrates
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
755
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
756 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
757 a = @{1, rand(2, 2), "three"@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
758 b = @{ a@{ [1, 3] @} @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
759 @result{} b =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
760 @{
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
761 [1,1] = 1
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
762 [1,2] = three
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
763 @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
764 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
765
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
766 @noindent
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
767 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
768 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
769 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
770 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
771 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
772 be simplified into the following
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
773
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
774 @example
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
775 a = @{1, rand(2, 2), "three"@};
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
776 b = a( [1, 3] )
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
777 @result{} b =
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
778 @{
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
779 [1,1] = 1
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
780 [1,2] = three
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
781 @}
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
782 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
783
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
784 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
785 assignment. An example is
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
786
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
787 @example
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
788 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
789 in @{1@} = ceil (rand (10, 1));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
790 in @{2@} = [];
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
791 in @{3@} = "last";
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
792 in @{4@} = "first";
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
793 out = cell (4, 1);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
794 [out@{1:2@}] = find (in@{1 : 3@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
795 [out@{3:4@}] = find (in@{[1, 2, 4]@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
796 @end group
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
797 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
798
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
799 Structure arrays can equally be used to create comma separated
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
800 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
801 array. For example
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
802
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
803 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
804 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
805 x = ceil (randn (10, 1));
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
806 in = struct ("call1", @{x, Inf, "last"@},
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
807 "call2", @{x, Inf, "first"@});
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7025
diff changeset
808 out = struct ("call1", cell (2, 1), "call2", cell (2, 1));
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
809 [out.call1] = find (in.call1);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
810 [out.call2] = find (in.call2);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
811 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
812 @end example