Indexing confusion

John W. Eaton jwe at bevo.che.wisc.edu
Fri May 2 11:55:42 CDT 2008


On  2-May-2008, Bill Denney wrote:

| > 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)))
| >   
| An alternative that I find more readable is:
| 
| subs = fullfact (size (X));
| X(subs(:,1), subs(:,2))
| 
| I'm not positive that works (haven't tested it), but I think it does, 
| and to me it is more readable.

It works, but it selects an intersection of the specified rows and
columns, which is different from what the sub2ind indexing does.
Compare

  x = hilb (10);
  x(sub2ind (size (x), [1,2,3], [4,5,6]))
  x([1,2,3], [4,5,6])

The first selects the elements x(1,4), x(2,5), and x(3,6).  The second
selects the intersection of rows [1,2,3] with the columns [4,5,6].

jwe


More information about the Help-octave mailing list