Trying to find row number in a large matrix

3 views (last 30 days)
Hi all, I am writing a code that need to be able to find the particular row number in a large nx3 matrix (where n will eventually be >100000). I created a line of code to accomplish this task, but above n=20000 it does not work. Each row is unique (the matrix will never repeat a line).
row_num = max(find(ismember(pts,[X Y Z],'rows')) %[X Y Z] is defined with a loop
Does anyone know of a way to run this where it will function at a higher n value.
edit: pts is the name of the nx3 matrix
edit: ismember is causing the problem (it is acting like it has a size limit)
  3 Comments
per isakson
per isakson on 25 Jun 2020
Edited: per isakson on 25 Jun 2020
I fail to reproduce the propblem you report on my R2018b/Win10!
"(it is acting like it has a size limit)" what exactly does that mean? Full error meassage please!
Will Schneider
Will Schneider on 25 Jun 2020
I believe that my issue was caused by user error. Sorry.

Sign in to comment.

Accepted Answer

per isakson
per isakson on 25 Jun 2020
Edited: per isakson on 25 Jun 2020
Your one-liner is missing a closing parentheses and Matlab proposes an improvement
rigth-clicking "find" opens a context menu and Matlab offers to do the change
Add the ")" and your code works fine on R2018b/Win10
%%
pts = randi( 1e6, 1e6,3 ); % whole numbers
%%
x = pts( 5e5, 1 );
y = pts( 5e5, 2 );
z = pts( 5e5, 3 );
row_num = find( ismember( pts, [x,y,z], 'rows' ), 1,'last' )
%%
z = pts( 5e5, 3 ) + 17;
row_num = find( ismember( pts, [x,y,z], 'rows' ), 1,'last' )
%%
z = pts( 5e5, 3 );
row_num = max(find(ismember(pts,[x,y,z],'rows')) )
outputs
row_num =
500000
row_num =
0×1 empty double column vector
row_num =
500000
>>

More Answers (0)

Categories

Find more on Cell Arrays in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!