MATLAB Answers

felix
1

Using find in a 3d matrix in MATLAB.

Asked by felix
on 3 Feb 2011
Latest activity Commented on by Rik
on 11 Sep 2017
I have a 3D Matrix such as
QQ=cat(3,w,q)
QQ(:,:,1) =
1 2
3 4
QQ(:,:,2) =
5 6
7 8
now i want to use
[r c]=find(QQ,8) r=max(r) c=max(c)
to find my position for point 8. 'find' just works for 2D arrays .for the 3D case it doesnt work. is there is possibility for 3D arrays?

  2 Comments

felix
on 3 Feb 2011
my goal is to get (2,2,2) or r=2, c=2 and v=2 as answer for point 8.thx in front for helping
I think you have a typo in your code. If you're looking for the position of the value 8, you should do FIND(QQ == 8). The second input to FIND isn't the value you're looking for, it's the *number of indices* to find.

Sign in to comment.

1 Answer

Answer by Kenneth Eaton on 3 Feb 2011
 Accepted Answer

When finding values in multidimensional (i.e. greater than 2-D) arrays using the function FIND, it is best to get a single linear index from FIND then convert it to subscripts using the function IND2SUB. Here's how you can find the position of 8 in your 3-D matrix:
[r,c,v] = ind2sub(size(QQ),find(QQ == 8));

  2 Comments

felix
on 3 Feb 2011
thx so much for the fast answer!!=))
Rik
on 11 Sep 2017
I wrote up a function that does this for the general case. It works with the same syntax as the built-in find, but it also supports multidimensional matrices. You can find it on the File Exchange. Then you can simply run:
[r,c,v]=findND(QQ==8);

Sign in to comment.