[Top][All Lists]

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

Re: Selecting values from a matrix via indices in another matrix

From: Juan Pablo Carbajal
Subject: Re: Selecting values from a matrix via indices in another matrix
Date: Tue, 30 Sep 2014 20:47:07 +0200

On Tue, Sep 30, 2014 at 6:57 PM, James Sherman Jr. <address@hidden> wrote:
On Tue, Sep 30, 2014 at 9:28 AM, Stefanie Hasler <address@hidden> wrote:
> Hello,
> I have two matrices: One 2x100 matrix A containing rows like [20 200], and
> one 300x300 matrix B containing a range of values from 0 to 20.
> Is there an easy way to extract a subset of the data contained in B as a
> vector by using the values in A as indices? For example, if A(1,:) says
> (20,20), the vector's first entry should be B(20,20).
> Right now I'm using a for-loop, looping through A, and writing the values I
> extract from B into a new vector. It works, but it's not pretty or
> efficient.
> Basically, I'd like to be able to write something like B(A), but that does
> not yield the correct output.
> Any help would be very appreciated!
> Fii
> _______________________________________________
> Help-octave mailing list
> address@hidden

Hi Fii,

First, if your first matrix is 2x100, then it has 2 rows and 100
columns, so your first row would be 100 elements long.  Did you mean
that it is 100x2 or that your first column would be [20;200]?

If it is 2x100, and the rows are like you say they are, then one
(horribly inefficient) way is to do something like:
C = diag(B(A(:,1), A(:,2));

I'm sure there is a better ways, but this could be a start.

Hope this helps.

James Sherman

Help-octave mailing list

This solution is also horrible but is easy to extend to more dimensions.

1. Convert you index matrix into a cell
subs_cell = mat2cell (A, size (A,1), ones (1,size (A,2)) );
2. Get the linear indeces from these subindeces
idx = sub2ind (size(B),subs_cell{:});
3. extract the data
C = B(idx);

reply via email to

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