annotate doc/interpreter/container.txi @ 7025:adf164b814b3

[project @ 2007-10-15 07:55:55 by dbateman]
author dbateman
date Mon, 15 Oct 2007 07:55:55 +0000
parents fd42779a8428
children 120f3135952f
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
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
313 in = struct ('call1', @{x, Inf, 'last'@}, 'call2', @{x, Inf, 'first'@});
7025
adf164b814b3 [project @ 2007-10-15 07:55:55 by dbateman]
dbateman
parents: 7018
diff changeset
314 in (:, 1) = []
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
315 @result{} in =
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
316 @{
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
317 call1 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
318
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 [1] = Inf
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
321 [2] = last
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
322 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
323
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
324 call2 =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
325
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 [1] = Inf
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
328 [2] = first
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
329 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
330
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
331 @}
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
332 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
333 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
334
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
335 @node Creating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
336 @subsection Creating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
337
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
338 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
339 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
340 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
341 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
342 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
343
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
344 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
345 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
346 struct ('field1', 1, 'field2', 2)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
347 @result{} ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
348 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
349 field1 = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
350 field2 = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
351 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
352 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
353 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
354
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
355 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
356 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
357 structure array with a consistent dimension. For example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
358
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
359 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
360 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
361 struct ('field1', @{1, 'one'@}, 'field2', @{2, 'two'@}, 'field3', 3);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
362 @result{} ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
363 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
364 field1 =
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 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
367 [1] = 1
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
368 [2] = one
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
369 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
370
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
371 field2 =
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 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
374 [1] = 2
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
375 [2] = two
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
376 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
377
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
378 field3 =
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 (,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
381 [1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
382 [2] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
383 ,)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
384
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
385 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
386 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
387 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
388
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
389 @DOCSTRING(struct)
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(isstruct)
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 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
394 listed below.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
395
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
396 @DOCSTRING(rmfield)
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(setfield)
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(orderfields)
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 @node Manipulating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
403 @subsection Manipulating Structures
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
404
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
405 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
406
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
407 @DOCSTRING(fieldnames)
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(isfield)
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(getfield)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
412
6863
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
413 @DOCSTRING(substruct)
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
414
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
415 @node Processing Data in Structures
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
416 @subsection Processing Data in Structures
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
417
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
418 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
419 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
420 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
421 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
422
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
423 @DOCSTRING(structfun)
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
424
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
425 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
426 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
427
3c64128e621c [project @ 2007-09-05 07:52:48 by dbateman]
dbateman
parents: 6839
diff changeset
428 @DOCSTRING(struct2cell)
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
429
6517
a1ec359aef37 [project @ 2007-04-11 15:14:48 by jwe]
jwe
parents: 6516
diff changeset
430 @node Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
431 @section Cell Arrays
3439
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
432 @cindex cell arrays
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
433
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
434 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
435 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
436 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
437 @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
438 and @samp{@}} as allocation and indexing operators.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
439
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
440 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
441 string and a 2-by-2 random matrix
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
442
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
443 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
444 c = @{"a string", rand(2, 2)@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
445 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
446
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
447 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
448 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
449 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
450
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
451 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
452 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
453 c@{1@}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
454 @result{} ans = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
455 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
456 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
457
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
458 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
459 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
460 extracted by indexing with a vector of indexes
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
461
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
462 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
463 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
464 c@{1:2@}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
465 @result{} ans =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
466
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
467 (,
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
468 [1] = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
469 [2] =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
470
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
471 0.593993 0.627732
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
472 0.377037 0.033643
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
473
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
474 ,)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
475 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
476 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
477
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
478 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
479 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
480 third place of the previously created cell array
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
481
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
482 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
483 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
484 c@{3@} = 3
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
485 @result{} c =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
486
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
487 @{
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
488 [1,1] = a string
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
489 [1,2] =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
490
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
491 0.593993 0.627732
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
492 0.377037 0.033643
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
493
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
494 [1,3] = 3
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 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
497 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
498
6868
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
499 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
500 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
501 this can be performed by the @code{celldisp} function.
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
502
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
503 @DOCSTRING(celldisp)
975fcdfb0d2d [project @ 2007-09-06 16:34:29 by dbateman]
dbateman
parents: 6863
diff changeset
504
6516
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
505 @menu
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
506 * Creating Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
507 * Indexing Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
508 * Cell Arrays of Strings::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
509 * Processing Data in Cell Arrays::
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
510 @end menu
ce5caa673642 [project @ 2007-04-11 14:26:39 by jwe]
jwe
parents: 6514
diff changeset
511
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
512 @node Creating Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
513 @subsection Creating Cell Array
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
515 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
516 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
517 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
518
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
519 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
520 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
521 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
522 a 2-by-2 cell array containing empty matrices
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
523
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
524 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
525 @group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
526 c = cell(2,2)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
527 @result{} c =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
528
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
529 @{
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
530 [1,1] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
531 [2,1] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
532 [1,2] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
533 [2,2] = [](0x0)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
534 @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
535 @end group
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
536 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
537
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
538 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
539 @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
540 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
541 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
542 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
543 of the first one is displayed
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
544
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
545 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
546 c1 = cell(3, 4, 5);
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
547 c2 = cell( [3, 4, 5] );
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
548 size(c1)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
549 @result{} ans =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
550 3 4 5
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
551 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
552
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
553 @noindent
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
554 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
555 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
556 @code{length}, @code{numel}, @code{rows}, and @code{columns}.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
557
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
558 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
559 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
560 @code{num2cell} and @code{mat2cell} functions.
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
561
3439
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
562 @DOCSTRING(cell)
3234a698073a [project @ 2000-01-14 09:51:14 by jwe]
jwe
parents:
diff changeset
563
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
564 @DOCSTRING(iscell)
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
565
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
566 @DOCSTRING(num2cell)
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(mat2cell)
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 @node Indexing Cell Arrays
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
571 @subsection Indexing Cell Arrays
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
572
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
573 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
574 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
575 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
576 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
577 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
578
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
579 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
580 c@{:, [1, 3]@} = 0;
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
581 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
582
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
583 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
584 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
585 array is very similar to numerical arrays, for example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
586
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
587 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
588 element = c@{1, 2@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
589 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
590
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
591 @noindent
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
592 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
593 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
594 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
595
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
596 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
597 @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
598 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
599
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
600 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
601 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
602 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
603 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
604 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
605
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
606 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
607 @group
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
608 x = @{'1', '2'; '3', '4'@};
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
609 x@{1, :@} = []
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
610 @result{} x =
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
611 @{
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
612 [1,1] = [](0x0)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
613 [2,1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
614 [1,2] = [](0x0)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
615 [2,2] = 4
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
616 @}
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
617
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
618 x(1, :) = []
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
619 @result{} x =
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
620 @{
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
621 [1,1] = 3
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
622 [1,2] = 4
6839
40ad39648884 [project @ 2007-08-28 15:28:13 by dbateman]
dbateman
parents: 6837
diff changeset
623 @}
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
624 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
625 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
626
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
627 @node Cell Arrays of Strings
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
628 @subsection Cell Arrays of Strings
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
629
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
630 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
631 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
632 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
633 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
634 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
635 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
636 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
637
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
638 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
639 a = ["hello"; "world"];
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
640 c = cellstr (a)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
641 @result{} c =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
642 @{
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
643 [1,1] = hello
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
644 [2,1] = world
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
645 @}
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
646 @end example
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 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
649 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
650 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
651 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
652 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
653 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
654 argument,
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
655
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
656 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
657 c = @{"hello", "world"@};
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
658 strcmp ("hello", c)
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
659 @result{} ans =
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
660 1 0
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
661 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
662
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
663 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
664 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
665 strings, @code{strcmp}, @code{strcmpi}, @code{strncmp}, @code{strncmpi},
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
666 @code{str2double}, @code{str2mat}, @code{strappend}, @code{strtrunc},
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
667 @code{strvcat}, @code{strfind}, and @code{strmatch}.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
668
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
669 @DOCSTRING(cellstr)
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(iscellstr)
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(cellidx)
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 @node Processing Data in Cell Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
676 @subsection Processing Data in Cell Arrays
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
677
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
678 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
679 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
680 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
681 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
682 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
683 array.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
684
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
685 @DOCSTRING(cellfun)
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 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
688 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
689 using the @code{cell2mat} and @code{cell2struct} functions.
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
690
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
691 @DOCSTRING(cell2mat)
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(cell2struct)
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 @node Comma Separated Lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
696 @section Comma Separated Lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
697 @cindex comma separated lists
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
698
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
699 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
700 functions. In the example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
701
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
702 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
703 max (@var{a}, @var{b})
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
704 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
705
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
706 @noindent
7001
8b0cfeb06365 [project @ 2007-10-10 18:02:59 by jwe]
jwe
parents: 6939
diff changeset
707 @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
708 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
709 example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
710
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 [@var{i}, @var{j}] = ceil (find (@var{x}, [], 'last'));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
713 @end example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
714
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
715 @noindent
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
716 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
717 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
718 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
719 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
720 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
721 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
722 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
723 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
724 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
725 example
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
726
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
727 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
728 a = @{1, [2, 3], 4@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
729 b = [a@{:@}]
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
730 @result{} b =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
731 1 2 3 4
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
732 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
733
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
734 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
735 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
736 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
737 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
738 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
739
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
740 @example
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
741 c = @{"GNU", "Octave", "is", "Free", "Software"@};
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
742 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
743 @print{} GNU Octave is Free Software
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
744 printf ("%s ", c@{:@});
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 @end example
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
747
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
748 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
749 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
750 containing the selected elements. By surrounding the list with
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
751 @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
752 following example illustrates
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
753
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
754 @example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
755 a = @{1, rand(2, 2), "three"@};
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
756 b = @{ a@{ [1, 3] @} @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
757 @result{} b =
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
758 @{
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
759 [1,1] = 1
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
760 [1,2] = three
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
761 @}
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
762 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
763
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
764 @noindent
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
765 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
766 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
767 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
768 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
769 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
770 be simplified into the following
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
771
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
772 @example
6518
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
773 a = @{1, rand(2, 2), "three"@};
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
774 b = a( [1, 3] )
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
775 @result{} b =
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
776 @{
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
777 [1,1] = 1
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
778 [1,2] = three
952c8b00525e [project @ 2007-04-11 20:50:22 by jwe]
jwe
parents: 6517
diff changeset
779 @}
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
780 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
781
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
782 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
783 assignment. An example is
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
784
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
785 @example
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
786 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
787 in @{1@} = ceil (rand (10, 1));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
788 in @{2@} = [];
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
789 in @{3@} = 'last';
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
790 in @{4@} = 'first';
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
791 out = cell (4, 1);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
792 [out@{1:2@}] = find (in@{1 : 3@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
793 [out@{3:4@}] = find (in@{[1, 2, 4]@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
794 @end group
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
795 @end example
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
796
6939
46d1ad37d943 [project @ 2007-10-01 16:12:20 by jwe]
jwe
parents: 6868
diff changeset
797 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
798 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
799 array. For example
6514
5ef6f71974db [project @ 2007-04-11 14:15:40 by jwe]
jwe
parents: 6502
diff changeset
800
6837
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
801 @example
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
802 @group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
803 x = ceil (randn (10, 1));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
804 in = struct ('call1', @{x, Inf, 'last'@}, 'call2', @{x, Inf, 'first'@});
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
805 out = struct ('call1', cell (2, 1), 'call2', cell (2, 1));
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
806 [out.call1] = find (in.call1);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
807 [out.call2] = find (in.call2);
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
808 @end group
7eefeed173ea [project @ 2007-08-27 20:20:55 by dbateman]
dbateman
parents: 6778
diff changeset
809 @end example