Mercurial > octave
annotate libinterp/corefcn/sub2ind.cc @ 30564:796f54d4ddbf stable
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2021.
In all .txi and .texi files except gpl.txi and gpl.texi in the
doc/liboctave and doc/interpreter directories, change the copyright
to "Octave Project Developers", the same as used for other source
files. Update copyright notices for 2022 (not done since 2019). For
gpl.txi and gpl.texi, change the copyright notice to be "Free Software
Foundation, Inc." and leave the date at 2007 only because this file
only contains the text of the GPL, not anything created by the Octave
Project Developers.
Add Paul Thomas to contributors.in.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 28 Dec 2021 18:22:40 -0500 |
parents | 7d6709900da7 |
children | a8d61c30f41a |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
29961
diff
changeset
|
3 // Copyright (C) 2009-2022 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21660
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
28 #endif |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
29 |
19269
65554f5847ac
don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
30 #include "Array-util.h" |
65554f5847ac
don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
31 #include "oct-locbuf.h" |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
32 #include "quit.h" |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
33 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14501
diff
changeset
|
34 #include "defun.h" |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
35 #include "error.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21055
diff
changeset
|
36 #include "errwarn.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
37 #include "ovl.h" |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
38 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29826
diff
changeset
|
39 OCTAVE_NAMESPACE_BEGIN |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
40 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
41 static dim_vector |
10258 | 42 get_dim_vector (const octave_value& val, const char *name) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
43 { |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
44 RowVector dimsv = val.row_vector_value (false, true); |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
45 dim_vector dv; |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
46 octave_idx_type n = dimsv.numel (); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
47 |
9666
a531dec450c4
allow 1D case for sub2ind and ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
48 if (n < 1) |
12483
7a5aacf65f81
Rewrite error strings in src/ to use variables named in documentation.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
49 error ("%s: dimension vector DIMS must not be empty", name); |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
50 |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
51 dv.resize (std::max (n, static_cast<octave_idx_type> (2))); |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
52 dv(1) = 1; |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
53 for (octave_idx_type i = 0; i < n; i++) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
54 { |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
55 octave_idx_type ii = dimsv(i); |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
56 if (ii == dimsv(i) && ii >= 0) |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
57 dv(i) = ii; |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
58 else |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
20956
diff
changeset
|
59 error ("%s: dimension vector DIMS must contain integers", name); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
60 } |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
61 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
62 return dv; |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
63 } |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
64 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14501
diff
changeset
|
65 DEFUN (sub2ind, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
66 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
67 @deftypefn {} {@var{ind} =} sub2ind (@var{dims}, @var{i}, @var{j}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
68 @deftypefnx {} {@var{ind} =} sub2ind (@var{dims}, @var{s1}, @var{s2}, @dots{}, @var{sN}) |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
69 Convert subscripts to linear indices. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
70 |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
71 The input @var{dims} is a dimension vector where each element is the size of |
28961
d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
Rik <rik@octave.org>
parents:
28907
diff
changeset
|
72 the array in the respective dimension (@pxref{XREFsize,,@code{size}}). The |
d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
Rik <rik@octave.org>
parents:
28907
diff
changeset
|
73 remaining inputs are scalars or vectors of subscripts to be converted. |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
74 |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
75 The output vector @var{ind} contains the converted linear indices. |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
76 |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
77 Background: Array elements can be specified either by a linear index which |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
78 starts at 1 and runs through the number of elements in the array, or they may |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
79 be specified with subscripts for the row, column, page, etc. The functions |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
80 @code{ind2sub} and @code{sub2ind} interconvert between the two forms. |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
81 |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
82 The linear index traverses dimension 1 (rows), then dimension 2 (columns), then |
23565
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
83 dimension 3 (pages), etc.@: until it has numbered all of the elements. |
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
84 Consider the following 3-by-3 matrices: |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
85 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
86 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
87 @group |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
88 [(1,1), (1,2), (1,3)] [1, 4, 7] |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
89 [(2,1), (2,2), (2,3)] ==> [2, 5, 8] |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
90 [(3,1), (3,2), (3,3)] [3, 6, 9] |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
91 @end group |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
92 @end example |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
93 |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
94 @noindent |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
95 The left matrix contains the subscript tuples for each matrix element. The |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
96 right matrix shows the linear indices for the same matrix. |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
97 |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
98 The following example shows how to convert the two-dimensional indices |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
99 @code{(2,1)} and @code{(2,3)} of a 3-by-3 matrix to linear indices with a |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
100 single call to @code{sub2ind}. |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
101 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
102 @example |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
103 @group |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
104 s1 = [2, 2]; |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
105 s2 = [1, 3]; |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
106 ind = sub2ind ([3, 3], s1, s2) |
22851
6eb581b597bc
doc: Add missing change from cset 5e111d533c99
Rik <rik@octave.org>
parents:
22850
diff
changeset
|
107 @result{} ind = 2 8 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
108 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
109 @end example |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
110 @seealso{ind2sub, size} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
111 @end deftypefn */) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
112 { |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
113 int nargin = args.length (); |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
114 |
9666
a531dec450c4
allow 1D case for sub2ind and ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
9479
diff
changeset
|
115 if (nargin < 2) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
116 print_usage (); |
20801
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20795
diff
changeset
|
117 |
28004
403df0b32204
update out_of_range error messages
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
118 dim_vector dv = get_dim_vector (args(0), "sub2ind"); |
403df0b32204
update out_of_range error messages
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
119 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
120 Array<idx_vector> idxa (dim_vector (nargin-1, 1)); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
121 |
20801
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20795
diff
changeset
|
122 for (int j = 0; j < nargin - 1; j++) |
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20795
diff
changeset
|
123 { |
23586
f6c5db0a02e7
maint: Deprecate is_numeric_type and replace with isnumeric.
Rik <rik@octave.org>
parents:
23565
diff
changeset
|
124 if (! args(j+1).isnumeric ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
125 error ("sub2ind: subscripts must be numeric"); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
126 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
127 try |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
128 { |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
129 idxa(j) = args(j+1).index_vector (); |
20555
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
130 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
131 if (j > 0 && args(j+1).dims () != args(1).dims ()) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
132 error ("sub2ind: all subscripts must be of the same size"); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
133 } |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
134 catch (index_exception& ie) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
135 { |
29163
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
28961
diff
changeset
|
136 ie.set_pos_if_unset (nargin-1, j+1); |
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
28961
diff
changeset
|
137 ie.set_var (); |
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
28961
diff
changeset
|
138 std::string msg = ie.message (); |
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
28961
diff
changeset
|
139 error_with_id (ie.err_id (), "%s", msg.c_str ()); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
140 } |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
141 } |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
142 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
143 return ovl (sub2ind (dv, idxa)); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
144 } |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
145 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
146 /* |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
147 ## Test evaluation |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
148 %!test |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
149 %! s1 = [ 1 1 1 1 ; 2 2 2 2 ]; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
150 %! s2 = [ 1 1 2 2 ; 1 1 2 2 ]; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
151 %! s3 = [ 1 2 1 2 ; 1 2 1 2 ]; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
152 %! in = [ 1 101 11 111 ; 2 102 12 112 ]; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
153 %! assert (sub2ind ([10 10 10], s1, s2, s3), in); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
154 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
155 # Test low index |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
156 %!assert (sub2ind ([10 10 10], 1, 1, 1), 1) |
20542
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20232
diff
changeset
|
157 %!error <index \(0,_,_\)> sub2ind ([10 10 10], 0, 1, 1) |
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20232
diff
changeset
|
158 %!error <index \(_,0,_\)> sub2ind ([10 10 10], 1, 0, 1) |
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20232
diff
changeset
|
159 %!error <index \(_,_,0\)> sub2ind ([10 10 10], 1, 1, 0) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
160 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
161 # Test high index |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
162 %!assert (sub2ind ([10 10 10], 10, 10, 10), 1000) |
20795
ba2367658dc8
Use ':' rather than ';' in error messages from bad indexing (bug #46536).
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
163 %!error <index \(11,_,_\): out of bound 10> sub2ind ([10 10 10], 11, 10, 10) |
ba2367658dc8
Use ':' rather than ';' in error messages from bad indexing (bug #46536).
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
164 %!error <index \(_,11,_\): out of bound 10> sub2ind ([10 10 10], 10, 11, 10) |
ba2367658dc8
Use ':' rather than ';' in error messages from bad indexing (bug #46536).
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
165 %!error <index \(_,_,11\): out of bound 10> sub2ind ([10 10 10], 10, 10, 11) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
166 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
167 # Test high index in the trailing dimensions |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
168 %!assert (sub2ind ([10, 1], 2, 1, 1), 2) |
20795
ba2367658dc8
Use ':' rather than ';' in error messages from bad indexing (bug #46536).
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
169 %!error <index \(_,2,_\): out of bound 1> sub2ind ([10, 1], 1, 2, 1) |
ba2367658dc8
Use ':' rather than ';' in error messages from bad indexing (bug #46536).
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
170 %!error <index \(_,_,2\): out of bound 1> sub2ind ([10, 1], 1, 1, 2) |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
171 %!assert (sub2ind ([10 10], 2, 2, 1), 12) |
20795
ba2367658dc8
Use ':' rather than ';' in error messages from bad indexing (bug #46536).
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
172 %!error <index \(_,_,2\): out of bound 1> sub2ind ([10 10], 2, 1, 2) |
ba2367658dc8
Use ':' rather than ';' in error messages from bad indexing (bug #46536).
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
173 %!error <index \(_,_,2\): out of bound 1> sub2ind ([10 10], 1, 2, 2) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
174 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
175 # Test handling of empty arguments |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
176 %!assert (sub2ind ([10 10], zeros (0,0), zeros (0,0)), zeros (0,0)) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
177 %!assert (sub2ind ([10 10], zeros (2,0), zeros (2,0)), zeros (2,0)) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
178 %!assert (sub2ind ([10 10], zeros (0,2), zeros (0,2)), zeros (0,2)) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
179 %!error <all subscripts .* same size> sub2ind ([10 10 10], zeros (0,2), zeros (2,0)) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
180 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
181 # Test handling of arguments of different size |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
182 %!error <all subscripts .* same size> sub2ind ([10 10], ones (1,2), ones (1,3)) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
183 %!error <all subscripts .* same size> sub2ind ([10 10], ones (1,2), ones (2,1)) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
184 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
185 ## Test input validation |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
186 %!error <dimension vector> sub2ind ([10 10.5], 1, 1) |
20542
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20232
diff
changeset
|
187 %!error <index \(1.5,_\)> sub2ind ([10 10], 1.5, 1) |
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20232
diff
changeset
|
188 %!error <index \(_,1.5\)> sub2ind ([10 10], 1, 1.5) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
189 */ |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
190 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14501
diff
changeset
|
191 DEFUN (ind2sub, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
192 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
193 @deftypefn {} {[@var{s1}, @var{s2}, @dots{}, @var{sN}] =} ind2sub (@var{dims}, @var{ind}) |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
194 Convert linear indices to subscripts. |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
195 |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
196 The input @var{dims} is a dimension vector where each element is the size of |
28961
d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
Rik <rik@octave.org>
parents:
28907
diff
changeset
|
197 the array in the respective dimension (@pxref{XREFsize,,@code{size}}). The |
d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
Rik <rik@octave.org>
parents:
28907
diff
changeset
|
198 second input @var{ind} contains linear indies to be converted. |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
199 |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
200 The outputs @var{s1}, @dots{}, @var{sN} contain the converted subscripts. |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
201 |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
202 Background: Array elements can be specified either by a linear index which |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
203 starts at 1 and runs through the number of elements in the array, or they may |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
204 be specified with subscripts for the row, column, page, etc. The functions |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
205 @code{ind2sub} and @code{sub2ind} interconvert between the two forms. |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
206 |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
207 The linear index traverses dimension 1 (rows), then dimension 2 (columns), then |
23565
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
208 dimension 3 (pages), etc.@: until it has numbered all of the elements. |
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
209 Consider the following 3-by-3 matrices: |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
210 |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
211 @example |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
212 @group |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
213 [1, 4, 7] [(1,1), (1,2), (1,3)] |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
214 [2, 5, 8] ==> [(2,1), (2,2), (2,3)] |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
215 [3, 6, 9] [(3,1), (3,2), (3,3)] |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
216 @end group |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
217 @end example |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
218 |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
219 @noindent |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
220 The left matrix contains the linear indices for each matrix element. The right |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
221 matrix shows the subscript tuples for the same matrix. |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
222 |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
223 The following example shows how to convert the two-dimensional indices |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
224 @code{(2,1)} and @code{(2,3)} of a 3-by-3 matrix to linear indices with a |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
225 single call to @code{sub2ind}. |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
226 |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
227 The following example shows how to convert the linear indices @code{2} and |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
228 @code{8} in a 3-by-3 matrix into subscripts. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
229 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
230 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
231 @group |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
232 ind = [2, 8]; |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
233 [r, c] = ind2sub ([3, 3], ind) |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
234 @result{} r = 2 2 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
235 @result{} c = 1 3 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
236 @end group |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
237 @end example |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
238 |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
239 If the number of output subscripts exceeds the number of dimensions, the |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
240 exceeded dimensions are set to @code{1}. On the other hand, if fewer |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
241 subscripts than dimensions are provided, the exceeding dimensions are merged |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
242 into the final requested dimension. For clarity, consider the following |
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
243 examples: |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
244 |
23200
895b8edb4f3c
doc: Fix build of docs broken in sub2ind (bug #50348).
Ernst Reissner <rei3ner@arcor.de>
parents:
23083
diff
changeset
|
245 @example |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
246 @group |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
247 ind = [2, 8]; |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
248 dims = [3, 3]; |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
249 ## same as dims = [3, 3, 1] |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
250 [r, c, s] = ind2sub (dims, ind) |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
251 @result{} r = 2 2 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
252 @result{} c = 1 3 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
253 @result{} s = 1 1 |
22850
5e111d533c99
doc: Rewrite docstrings for sub2ind and ind2sub.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
254 ## same as dims = [9] |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
255 r = ind2sub (dims, ind) |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
256 @result{} r = 2 8 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
257 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
258 @end example |
29824
6e42c37fbc8a
ind2sub: Fix typo in "see also" section of docstring (bug #60842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
29358
diff
changeset
|
259 @seealso{sub2ind, size} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
260 @end deftypefn */) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
261 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20801
diff
changeset
|
262 if (args.length () != 2) |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
263 print_usage (); |
20801
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20795
diff
changeset
|
264 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
265 octave_value_list retval; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
266 |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
267 // Redimension to provided number of subscripts. |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
268 dim_vector dv = get_dim_vector (args(0), "ind2sub").redim (nargout); |
20555
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
269 |
20801
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20795
diff
changeset
|
270 try |
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20795
diff
changeset
|
271 { |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
272 retval = Array<octave_value> (ind2sub (dv, args(1).index_vector ())); |
20801
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20795
diff
changeset
|
273 } |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
274 catch (const index_exception& ie) |
20801
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20795
diff
changeset
|
275 { |
29163
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
28961
diff
changeset
|
276 error ("ind2sub: invalid index %s", ie.what ()); |
9479
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
277 } |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
278 |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
279 return retval; |
d9716e3ee0dd
supply optimized compiled sub2ind & ind2sub
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
280 } |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
281 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
282 /* |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
283 ## Examples |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
284 %!test |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
285 %! [r, c] = ind2sub ([3, 3], [2, 8]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
286 %! assert (r, [2, 2]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
287 %! assert (c, [1, 3]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
288 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
289 %!test |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
290 %! [r, c, s] = ind2sub ([3, 3], [2, 8]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
291 %! assert (r, [2, 2]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
292 %! assert (c, [1, 3]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
293 %! assert (s, [1, 1]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
294 %! [r, c, s] = ind2sub ([3, 3, 1], [2, 8]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
295 %! assert (r, [2, 2]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
296 %! assert (c, [1, 3]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
297 %! assert (s, [1, 1]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
298 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
299 %!test |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
300 %! r = ind2sub ([3, 3], [2, 8]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
301 %! assert (r, [2, 8]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
302 %! r = ind2sub (9, [2, 8]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
303 %! assert (r, [2, 8]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
304 |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
305 ## 3-dimensional test |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
306 %!test |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
307 %! [r, c, s] = ind2sub ([2, 2, 2], 1:8); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
308 %! assert (r, [1, 2, 1, 2, 1, 2, 1, 2]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
309 %! assert (c, [1, 1, 2, 2, 1, 1, 2, 2]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
310 %! assert (s, [1, 1, 1, 1, 2, 2, 2, 2]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
311 %! [r, c] = ind2sub ([2, 2, 2], 1:8); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
312 %! assert (r, [1, 2, 1, 2, 1, 2, 1, 2]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
313 %! assert (c, [1, 1, 2, 2, 3, 3, 4, 4]); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
314 %! r = ind2sub ([2, 2, 2], 1:8); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
315 %! assert (r, 1:8); |
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
316 |
28907
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
28012
diff
changeset
|
317 %!error <DIMS must contain integers> ind2sub ([2, -2], 3) |
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
28012
diff
changeset
|
318 %!error <index out of range> ind2sub ([2, 2, 2], 1:9) |
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
28012
diff
changeset
|
319 %!error <invalid index> ind2sub ([2, 2, 2], -1:8) |
22086
67a44207da71
ind2sub: Ensure Matlab compatibility and improve documentation (bug #48092).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
21966
diff
changeset
|
320 */ |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29826
diff
changeset
|
321 |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29826
diff
changeset
|
322 OCTAVE_NAMESPACE_END |