changeset 9159:c07cbffb82e3

update indexing docs
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 29 Apr 2009 08:16:48 +0200
parents 48ee8c73ff38
children 11e0f0e8ff00
files doc/ChangeLog doc/interpreter/expr.txi
diffstat 2 files changed, 39 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/doc/ChangeLog	Wed Apr 29 07:44:34 2009 +0200
+++ b/doc/ChangeLog	Wed Apr 29 08:16:48 2009 +0200
@@ -1,6 +1,7 @@
 2009-04-29  Jaroslav Hajek  <highegg@gmail.com>
 
 	* interpreter/numbers.txi: Update info on ranges.
+	* interpreter/expr.txi: Update some info on indexing.
 
 2009-04-26  Rik  <rdrider0-list@yahoo.com>
 	* interpreter/arith.txi: Update section 17.3 (Trigonometry) of arith.txi
--- a/doc/interpreter/expr.txi	Wed Apr 29 07:44:34 2009 +0200
+++ b/doc/interpreter/expr.txi	Wed Apr 29 08:16:48 2009 +0200
@@ -93,6 +93,14 @@
 @noindent
 and select the first row of the matrix.
 
+In general, an array with @samp{n} dimensions can be indexed using @samp{m}
+indices.  If @code{n == m}, each index corresponds to its respective dimension.
+The set of index tuples determining the result is formed by the cartesian product
+of the index vectors (or ranges or scalars).
+If @code{n < m}, then the array is padded by trailing singleton dimensions.
+If @code{n > m}, the last @code{n-m+1} dimensions are folded into a single
+dimension with extent equal to product of extents of the original dimensions.
+
 @c FIXED -- sections on variable prefer_zero_one_indexing were removed
 
 Indexing a scalar with a vector of ones can be used to create a
@@ -102,7 +110,7 @@
 @example
 @group
 a = 13;
-a ([1, 1, 1, 1])
+a (ones (1, 4))
 @end group
 @end example
 
@@ -115,17 +123,41 @@
 @example
 @group
 a = 13;
-a ([1, 1], [1, 1, 1])
+a (ones (1, 2), ones (1, 3))
 @end group
 @end example
 
 @noindent
 create a 2 by 3 matrix with all elements equal to 13.
 
-This is an obscure notation and should be avoided.  It is better to
-use the function @code{ones} to generate a matrix of the appropriate
-size whose elements are all one, and then to scale it to produce the
-desired result.  @xref{Special Utility Matrices}.
+The last example could also be written as
+
+@example
+@group
+13 (ones (2, 3))
+@end group
+@end example
+
+It should be, noted that @code{ones (1, n)} (a row vector of ones) results in a
+range (with zero increment), and is therefore more efficient when used in index
+expression than other forms of @dfn{ones}. In particular, when @samp{r} is a row
+vector, the expressions
+
+@example
+  r(ones (1, n), :)
+@end example
+
+@example
+  r(ones (n, 1), :)
+@end example
+
+will produce indentical results, but the first one will be significantly
+faster, at least for @samp{r} and @samp{n} large enough. The reason is that
+in the first case the index is kept in a compressed form, which allows Octave
+to choose a more efficient algorithm to handle the expression.
+
+In general, for an user unaware of these subtleties, it is best to use
+the function @dfn{repmat} for spreading arrays into bigger ones.
 
 It is also possible to create a matrix with different values.  The
 following example creates a 10 dimensional row vector @math{a} containing