Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Topic: Extracting particular row of a matrix based on specific condition
Replies: 14   Last Post: Jan 3, 2014 10:03 AM

 Messages: [ Previous | Next ]
 dpb Posts: 9,850 Registered: 6/7/07
Re: Extracting particular row of a matrix based on specific condition
Posted: Jan 2, 2014 2:02 PM

On 1/2/2014 12:00 PM, Bruno Luong wrote:
> dpb <none@non.net> wrote in message <la3v66\$3rm\$1@speranza.aioe.org>...
>

>> Been puzzling over your last comment, Bruno...couldn't decide what you
>> meant by "recomputing it". I guess you're speaking of the logical test
>> to select nonzero elements instead of just a direct use of the logical

>
> Yes, (ib > 0) is identical as t, wht throw it away with "~" ?

Because they're _not_ the same...OP wants the order in the order found
in A whereas the logical array directly returns the order in B. See the
difference for the example case...

>> A = [519 520 521 1000];
>> B = [1000 0.12 0.005 0.1

520 0.13 0.001 0.89
518 0.12 0.002 0.98
600 0.14 0.004 0.90];
>> B(ismember(B(:,1),A),2:end)
ans =
0.1200 0.0050 0.1000
0.1300 0.0010 0.8900

Returns the first two rows of B which are the 1st and 2nd entries in A,
in order. So the logical array has the first two values T, rest F and
those two are the ones returned by matching position.

OTOH,

>> [~,ib]=ismember(A,B(:,1));
>> B(ib(ib>0),2:end)

ans =
0.1300 0.0010 0.8900
0.1200 0.0050 0.1000
>>

Returns the same two rows but in obverse order (namely the order in
which the locations are found in A as requested). The difference is
that ib returns the absolute value of the row in B where the
corresponding value from A was found and so is [2 1 0 0] numeric instead
of [1 1 0 0] logical. Since it isn't a logical array the need to use
the logical test to only return the nonzero elements but do need to use
them as indices, not logicals.

>> The problem I see with sort() is that I think in the general case the
>> results could be jumbled since the two matrices are given
>> independently. AFAICT there's no guarantee the magnitude order would
>> be the same as the position order in the B array of an arbitrary
>> selection of values in the A vector. Or, at least, that's my
>> understanding of the OP's quest...
>>

>
> I don't understand. In my command, sort(ib(t)) returns the indexes in
> ascending order. Nothing to do with "magnitude".

You're right there; it's on the ib vector instead of B; my bad there...

It accomplishes same thing as above does but the other does it w/o need

--

Date Subject Author
12/29/13 Pg
12/29/13 Pg
12/29/13 dpb
12/29/13 Pg
12/30/13 dpb
12/31/13 Bruno Luong
12/31/13 dpb
1/1/14 Bruno Luong
1/2/14 dpb
1/2/14 Pg
1/2/14 dpb
1/3/14 dpb
1/2/14 Bruno Luong
1/2/14 dpb
1/3/14 dpb