help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

extracting elements without 'for' loop


From: Mike Miller
Subject: extracting elements without 'for' loop
Date: Sun, 6 Jul 2003 19:54:14 -0500 (CDT)

I have an n-by-m matrix W that tells me which m elements to extract from
each of the n rows of the n-by-2m matrix G.  So, if these were G and W:

G=reshape([1:24],4,6); W=[1 3 6;2 3 5;1 4 5 ; 2 4 6];

G =

   1   5   9  13  17  21
   2   6  10  14  18  22
   3   7  11  15  19  23
   4   8  12  16  20  24


W =

  1  3  6
  2  3  5
  1  4  5
  2  4  6


I would want to extract this matrix from G:

G(1,W(1,1)) G(1,W(1,2)) G(1,W(1,3))
G(2,W(2,1)) G(2,W(2,2)) G(2,W(2,3))
G(3,W(3,1)) G(3,W(3,2)) G(3,W(3,3))
G(4,W(4,1)) G(4,W(4,2)) G(4,W(4,3))


Both G and W will sometimes be fairly large.  I want to avoid 'for' loops
(I assume they'll slow me down).  This seems to work...

V=reshape(G(:,W),n^2,size(W,2));
output=V([1:n+1:n^2],:);

...but the matrix V will be very large with large n.  This was another of
my ideas...

V=reshape([G(:,W');zeros(1,m*n)]',(n+1)*m,n)';
output=V(1:n,1:m);

...which seems to give the same answer, but it has the same problem of
creating a large matrix V that is only discarded.

Any thoughts?

Mike



-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]