Search All of the Math Forum:

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

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

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 3, 2014 10:03 AM

On 1/2/2014 10:12 AM, Poulomi wrote:
> dpb <none@non.net> wrote in message <la3v66\$3rm\$1@speranza.aioe.org>...
>> On 1/1/2014 3:50 AM, Bruno Luong wrote:
>> > dpb <none@non.net> wrote in message <l9ulhp\$sf7\$1@speranza.aioe.org>...
>> >> On 12/31/2013 2:16 AM, Bruno Luong wrote:
>> >> > B(ismember(A,B(:,1)),2:end)
>> >>
>> >> That returns the rows in B for which the indices are found in A, not
>> >> B, unfortunately, Bruno. It does get the first one correct as they're
>> >> both in position 2, but then it returns fourth row, not first where
>> >> the last element of A is found in first column of B...

>> >
>> > You are write, it learns me not to do things too fast.
>> >

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

>> >> ans =
>> >> 0.1300 0.0010 0.8900
>> >> 0.1200 0.0050 0.1000

>> >> >>
>> >>
>> >
>> > Should use the first argument of ismember() rather than recomputing it.
>> > Also OP requires the original order, so sort() will fix the order:
>> >
>> > [t, iB] = ismember(A,B(:,1));
>> > B(sort(iB(i)),2:end)

>>
>> 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

...

> sort is not working but indexing one is working fine. I checked with
> random element, my matrix size is 3822x14.

No point in sort() here; but Bruno's correct in not "recomputing" the
logical vector. As my note to him allows, was a little slow on the draw
there....

[liA, iB] = ismember(A,B(:,1));
C=B(iB(liA)),2:end);

Now, the one possible "fly in the ointment" is that ismember() returns a
vector of length(A) and the locations from B returned are the one
highest index found. If you need all occurrences and there can be
duplicates in B then you've got another step.

--

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