help-octave
[Top][All Lists]

## Re: FW: Matrix index, Please e-mail back.

 From: Jordi Gutierrez Hermoso Subject: Re: FW: Matrix index, Please e-mail back. Date: Tue, 5 Dec 2006 17:39:48 -0600

```Sorry... I got a little stubborn about trying to understand this, and
now I think I know how to get what you want.

```
```| How would I do what was intended:
|
| 2 4
| 3 8
| 9 3
```
```
[from matrix:]

```
```| | a =
| |   1  2  3  4  5
| |   2  3  4  5  6
| |   3  4  5  6  7
| |   9  8  7  6  5
| |   0  3  4  5  6
```
```
There are cute little indexing hacks that can be accomplished if you
remember that Octave stores matrices in Fortran column-major order. In
other words, a matrix can be indexed by a single index as if it were
one long vector.

This allows, f'rinstance, with a larger example:

octave:88> A = zeros(10); #allocate empty 10x10 matrix.
octave:89> A(:) = [1:100] #Let nth entry of A equal to its single
#Fortran-order index.
A =

1   11   21   31   41   51   61   71   81   91
2   12   22   32   42   52   62   72   82   92
3   13   23   33   43   53   63   73   83   93
4   14   24   34   44   54   64   74   84   94
5   15   25   35   45   55   65   75   85   95
6   16   26   36   46   56   66   76   86   96
7   17   27   37   47   57   67   77   87   97
8   18   28   38   48   58   68   78   88   98
9   19   29   39   49   59   69   79   89   99
10   20   30   40   50   60   70   80   90  100

octave:90> i = [2,3,4]' #The search pattern we want.
i =

2
3
4

octave:91> j = [0:10:(10-4)*10] #Offset
j =

0  10  20  30  40  50  60

octave:92> j += [0:length(j)-1] #For the specific pattern we want
j =

0  11  22  33  44  55  66

octave:93> [ii, jj] = meshgrid(i,j); #Just a convenient shorthand
octave:94> A(ii+jj)' #Voila, the elements of A that we sought:
ans =

2  13  24  35  46  57  68
3  14  25  36  47  58  69
4  15  26  37  48  59  70

Now I think I've got it. I think for a large enough matrix, a method
like this will be faster than for-loops, by replacing for-loops with
two relatively small matrix additions. I hope it does speed up your
code.

(Sorry for chastising you previously for top-posting like that.
I seriously do believe that you should reconsider your
posting style, but I can live with more top-posting if you really want
to keep on doing it.)

HTH,
- Jordi G. H.

```