dpb
Posts:
9,716
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 >> addressing vector. ...
> 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.


