Section: Array Generation and Manipulations
y = find(x)
The indices returned are generalized column indices, meaning that if
the array x
is of size [d1,d2,...,dn]
, and the
element x(i1,i2,...,in)
is nonzero, then y
will contain the integer
The second syntax for the find
command is
[r,c] = find(x)
which returns the row and column index of the nonzero entries of x
.
The third syntax for the find
command also returns the values
[r,c,v] = find(x).
This form is particularly useful for converting sparse matrices into IJV form.
find
in FreeMat programs.
--> a = [1,2,5,2,4]; --> find(a==2) ans = <uint32> - size: [2 1] Columns 1 to 1 2 4
Here is an example of using find to replace elements of A
that are 0
with the number 5
.
--> A = [1,0,3;0,2,1;3,0,0] A = <int32> - size: [3 3] Columns 1 to 3 1 0 3 0 2 1 3 0 0 --> n = find(A==0) n = <uint32> - size: [4 1] Columns 1 to 1 2 4 6 9 --> A(n) = 5 A = <int32> - size: [3 3] Columns 1 to 3 1 5 3 5 2 1 3 5 5
Incidentally, a better way to achieve the same concept is:
--> A = [1,0,3;0,2,1;3,0,0] A = <int32> - size: [3 3] Columns 1 to 3 1 0 3 0 2 1 3 0 0 --> A(A==0) = 5 A = <int32> - size: [3 3] Columns 1 to 3 1 5 3 5 2 1 3 5 5
Now, we can also return the indices as row and column indices using the two argument
form of find
:
--> A = [1,0,3;0,2,1;3,0,0] A = <int32> - size: [3 3] Columns 1 to 3 1 0 3 0 2 1 3 0 0 --> [r,c] = find(A) r = <uint32> - size: [5 1] Columns 1 to 1 1 3 2 1 2 c = <uint32> - size: [5 1] Columns 1 to 1 1 1 2 3 3
Or the three argument form of find
, which returns the value also:
--> [r,c,v] = find(A) r = <uint32> - size: [5 1] Columns 1 to 1 1 3 2 1 2 c = <uint32> - size: [5 1] Columns 1 to 1 1 1 2 3 3 v = <int32> - size: [5 1] Columns 1 to 1 1 3 2 3 1