Find indices and values of nonzero elements
collapse all in page
Syntax
k = find(X)
k = find(X,n)
k = find(X,n,direction)
[row,col]= find(___)
[row,col,v]= find(___)
Description
example
k = find(X) returns a vector containing the linear indices of each nonzero element in array X.
If
Xis a vector, thenfindreturns a vector with the same orientation asX.If
Xis a multidimensional array, thenfindreturns a column vector of the linear indices of the result.
example
k = find(X,n) returnsthe first n indices corresponding to the nonzeroelements in X.
example
k = find(X,n,direction),where direction is 'last', findsthe last n indices corresponding to nonzero elementsin X. The default for direction is 'first',which finds the first n indices corresponding tononzero elements.
example
[row,col]= find(___) returns the row and column subscriptsof each nonzero element in array X using any ofthe input arguments in previous syntaxes.
example
[row,col,v]= find(___) also returns vector v,which contains the nonzero elements of X.
Examples
collapse all
Zero and Nonzero Elements in Matrix
Open Live Script
Find the nonzero elements in a 3-by-3 matrix.
X = [1 0 2; 0 1 1; 0 0 4]
X = 3×3 1 0 2 0 1 1 0 0 4k = find(X)
k = 5×1 1 5 7 8 9Use the logical not operator on X to locate the zeros.
k2 = find(~X)
k2 = 4×1 2 3 4 6Elements Satisfying a Condition
Open Live Script
Find the first five elements that are less than 10 in a 4-by-4 magic square matrix.
X = magic(4)
X = 4×4 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1k = find(X<10,5)
k = 5×1 2 3 4 5 7View the corresponding elements of X.
X(k)
ans = 5×1 5 9 4 2 7Elements Equal to Specific Values
Open Live Script
To find a specific integer value, use the == operator. For instance, find the element equal to 13 in a 1-by-10 vector of odd integers.
x = 1:2:20
x = 1×10 1 3 5 7 9 11 13 15 17 19k = find(x==13)
k = 7
To find a noninteger value, use a tolerance value based on your data. Otherwise, the result is sometimes an empty matrix due to floating-point roundoff error.
y = 0:0.1:1
y = 1×11 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000k = find(y==0.3)
k = 1x0 empty double row vector
k = find(abs(y-0.3) < 0.001)
k = 4
Last Several Nonzero Elements
Open Live Script
Create a 6-by-6 magic square matrix with all of the odd-indexed elements equal to zero.
X = magic(6);X(1:2:end) = 0
X = 6×6 0 0 0 0 0 0 3 32 7 21 23 25 0 0 0 0 0 0 8 28 33 17 10 15 0 0 0 0 0 0 4 36 29 13 18 11Locate the last four nonzeros.
k = find(X,4,'last')k = 4×1 30 32 34 36Elements Satisfying Multiple Conditions
Open Live Script
Find the first three elements in a 4-by-4 matrix that are greater than 0 and less than 10. Specify two outputs to return the row and column subscripts to the elements.
X = [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21]
X = 4×4 18 3 1 11 8 10 11 3 9 14 6 1 4 3 15 21[row,col] = find(X>0 & X<10,3)
row = 3×1 2 3 4col = 3×1 1 1 1The first instance is X(2,1), which is 8.
Subscripts and Values for Nonzero Elements
Open Live Script
Find the nonzero elements in a 3-by-3 matrix. Specify three outputs to return the row subscripts, column subscripts, and element values.
X = [3 2 0; -5 0 7; 0 0 1]
X = 3×3 3 2 0 -5 0 7 0 0 1[row,col,v] = find(X)
row = 5×1 1 2 1 2 3col = 5×1 1 1 2 3 3v = 5×1 3 -5 2 7 1Subscripts of Multidimensional Array
Open Live Script
Find the nonzero elements in a 4-by-2-by-3 array. Specify two outputs, row and col, to return the row and column subscripts of the nonzero elements. When the input is a multidimensional array (N > 2), find returns col as a linear index over the N-1 trailing dimensions of X.
X = zeros(4,2,3);X([1 12 19 21]) = 1
X = X(:,:,1) = 1 0 0 0 0 0 0 0X(:,:,2) = 0 0 0 0 0 0 1 0X(:,:,3) = 0 1 0 0 1 0 0 0
[row,col] = find(X)
row = 4×1 1 4 3 1col = 4×1 1 3 5 6Input Arguments
collapse all
X — Input array
scalar | vector | matrix | multidimensional array
Input array, specified as a scalar, vector, matrix, or multidimensional array.
Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Complex Number Support: Yes
n — Number of nonzeros to find
positive integer scalar
Number of nonzeros to find, specified as a positive integerscalar. By default, find(X,n) looks for the first n nonzeroelements in X.
direction — Search direction
'first' (default) | 'last'
Search direction, specified as the string 'first' or 'last'.Look for the last n nonzeroelements in X using find(X,n,'last').
Output Arguments
collapse all
k — Indices to nonzero elements
vector
Indices to nonzero elements, returned as a vector.
If
Xis a row vector, thenkis also a row vector. Otherwise,kis a column vector.kis an empty row vector or empty column vector whenXis an empty array or has no nonzero elements.finduses the convention thatkis an empty matrix[]whenXis an empty matrix[].
You can return the nonzero values in X using X(k).
row — Row subscripts
vector
Row subscripts, returned as a vector. Together, row and col specifythe X(row,col) subscripts corresponding to thenonzero elements in X.
col — Column subscripts
vector
Column subscripts, returned as a vector. Together, row and col specifythe X(row,col) subscripts corresponding to thenonzero elements in X.
If X is a multidimensional array with N> 2, then col is a linear index overthe N-1 trailing dimensions of X.This preserves the relation X(row(i),col(i)) == v(i).
v — Nonzero elements of X
vector
Nonzero elements of X, returned as a vector.
More About
collapse all
Linear Indices
A linear index allows use of a single subscriptto index into an array, such as A(k). MATLAB® treatsthe array as a single column vector with each column appended to thebottom of the previous column. Thus, linear indexing numbers the elementsin the columns from top to bottom, left to right.
For example, consider a 3-by-3 matrix. You can reference the A(2,2) elementwith A(5), and the A(2,3) elementwith A(8). The linear index changes depending onthe size of the array; A(5) returns a differentlylocated element for a 3-by-3 matrix than it does for a 4-by-4 matrix.
The sub2ind and ind2sub functionsare useful in converting between subscripts and linear indices.
Tips
To find array elements that meet a condition, use
findinconjunction with a relational expression. For example,find(X<5)returnsthe linear indices to the elements inXthat areless than5.To directly find the elements in
Xthatsatisfy the conditionX<5, useX(X<5).Avoid function calls likeX(find(X<5)), whichunnecessarily usefindon a logical matrix.When you execute
findwith a relationaloperation likeX>1, it is important to rememberthat the result of the relational operation is a logical matrix ofones and zeros. For example, the command[row,col,v] = find(X>1)returnsa column vector of logical1(true)values forv.The row and column subscripts,
rowandcol,are related to the linear indices inkbyk= sub2ind(size(X),row,col).
Extended Capabilities
Tall Arrays
Calculate with arrays that have more rows than fit in memory.
Usage notes and limitations:
Xmust be a tall column vector.
For more information, see Tall Arrays.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
If a variable-size input becomes a row vector at runtime, then code generation ends with an error. This limitation doesnot apply when the input is scalar or is a variable-length row vector.
For variable-size inputs, the shape of empty outputs(0-by-0, 0-by-1, or 1-by-0) depends on the upper bounds of the sizeof the input. When the input array is a scalar or [] at run time,the output might not match MATLAB. If the input is a variable-lengthrow vector, then the size of an empty output is 1-by-0. Otherwise,the size is 0-by-1.
The generated code always returns a variable-lengthvector. Even when you provide the output vector
k,the output is not fixed-size because the output can contain fewerthankelements. For example,find(x,1)returnsa variable-length vector with one or zero elements.
Thread-Based Environment
Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.
This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
This function fully supports GPU arrays. For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
This function fully supports distributed arrays. For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Version History
Introduced before R2006a
See Also
ind2sub | nonzeros | strfind | sub2ind | Short-Circuit AND | Short-Circuit OR | ismember
Topics
- Find Array Elements That Meet a Condition
- Array Indexing
- Relational Operations
- Sparse Matrices
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office