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

`X`

is a vector, then`find`

returns a vector with the same orientation as`X`

.If

`X`

is a multidimensional array, then`find`

returns 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 4

k = find(X)

`k = `*5×1* 1 5 7 8 9

Use the logical `not`

operator on `X`

to locate the zeros.

k2 = find(~X)

`k2 = `*4×1* 2 3 4 6

### Elements 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 1

k = find(X<10,5)

`k = `*5×1* 2 3 4 5 7

View the corresponding elements of `X`

.

X(k)

`ans = `*5×1* 5 9 4 2 7

### Elements 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 19

k = 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.0000

k = 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 11

Locate the *last* four nonzeros.

`k = find(X,4,'last')`

`k = `*4×1* 30 32 34 36

### Elements 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 4

`col = `*3×1* 1 1 1

The 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 3

`col = `*5×1* 1 1 2 3 3

`v = `*5×1* 3 -5 2 7 1

### Subscripts 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 1

`col = `*4×1* 1 3 5 6

## Input 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

`X`

is a row vector, then`k`

is also a row vector. Otherwise,`k`

is a column vector.`k`

is an empty row vector or empty column vector when`X`

is an empty array or has no nonzero elements.`find`

uses the convention that`k`

is an empty matrix`[]`

when`X`

is 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

`find`

inconjunction with a relational expression. For example,`find(X<5)`

returnsthe linear indices to the elements in`X`

that areless than`5`

.To directly find the elements in

`X`

thatsatisfy the condition`X<5`

, use`X(X<5)`

.Avoid function calls like`X(find(X<5))`

, whichunnecessarily use`find`

on a logical matrix.When you execute

`find`

with a relationaloperation like`X>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 logical`1`

(`true`

)values for`v`

.The row and column subscripts,

`row`

and`col`

,are related to the linear indices in`k`

by`k= sub2ind(size(X),row,col)`

.

## Extended Capabilities

### Tall Arrays

Calculate with arrays that have more rows than fit in memory.

Usage notes and limitations:

`X`

must 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 fewerthan`k`

elements. 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