## using find function and logical array

### Lorenne (view profile)

on 5 Jun 2018
Latest activity Commented on by Lorenne

on 5 Jun 2018

### Birdman (view profile)

If i have a matrix Z=[1 0 1;0 1 0;1 0 1];
>> find(Z==1)
ans =
1
3
5
7
9
>> find(Z(Z==1))
ans =
1
2
3
4
5
Why does the find(Z(Z==1)) produces the above output?

### Birdman (view profile)

on 5 Jun 2018
Edited by Birdman

### Birdman (view profile)

on 5 Jun 2018

Because
Z(Z==1)
will produce
1
1
1
1
1
which is a new column vector generated from the initial line. Then, you want to find the Z(Z==1) which is equivalent to Z(Z==1)~=0, therefore you obtain
1
2
3
4
5
which are the indices of all ones in your vector.

Lorenne

on 5 Jun 2018
Thanks!

### monika shivhare (view profile)

on 5 Jun 2018

find(M) takes the matrix given in argument M, and returns matrix of indexes in M where value at that index in M is not zero. Z==1 gives a logical matrix of size(Z) showing 1 at index where value of Z is equal to 1.
>> Z==1
ans =
3×3 logical array
1 0 1
0 1 0
1 0 1
logical indexing of Z returns a array of elements of Z where logical value at that index is 1. So, Z(Z==1) gives array of elements of Z where (Z==1) has value 1
>> Z(Z==1)
ans =
1
1
1
1
1
Now, if we execute find(Z(Z==1)), it will return indexes of Z(Z==1) where value of Z(Z==1) is not zero. Value of Z(Z==1) is nonzero at index [1,2,3,4,5]. Hence,
>> find(Z(Z==1))
ans =
1
2
3
4
5

Stephen Cobeldick

### Stephen Cobeldick (view profile)

on 5 Jun 2018
+1 nice and clear explanation!
Lorenne

### Lorenne (view profile)

on 5 Jun 2018
Thanks!! 