Indexing confusion

John W. Eaton jwe at bevo.che.wisc.edu
Thu May 1 11:15:25 CDT 2008


On  1-May-2008, Michael Grossbach wrote:

| Assume a matrix
| X = [1, 2; 3, 4];
| To produce, say, the second element of the first row one would issue
| X(1,2)
| ans = 2
| To obtain all combinations of elements in X I then use
| fullfact(size(X))
| ans =
|     1   1
|     1   2
|     2   1
|     2   2
| 
| To my confusion,
| X(fullfact(size(X)))
| 
| produces
| ans =
|     1   1
|     1   3
|     3   1
|     3   3
| 
| instead of the expected
| ans =
|     1
|     2
|     3
|     4
| Is this intended behaviour and am I missing something?

It's expected.  Indexing a matrix with another single matrix produces
a result the same size as the index.  Elements of the matrix and index
are accessed in column-major order.  Note the difference between
X(1,2) and X([1,2]).  To get the result you want, try

  subs = fullfact (size (X));
  X(sub2ind (size (X), subs(:,1), subs(:,2)))

jwe


More information about the Help-octave mailing list