Main Content

# find

## 语法

``k = find(X)``
``k = find(X,n)``
``k = find(X,n,direction)``
``[row,col] = find(___)``
``[row,col,v] = find(___)``

## 说明

``k = find(X)` 返回一个包含数组 `X` 中每个非零元素的线性索引的向量。如果 `X` 为向量，则 `find` 返回方向与 `X` 相同的向量。如果 `X` 为多维数组，则 `find` 返回由结果的线性索引组成的列向量。`

``k = find(X,n)` 返回与 `X` 中的非零元素对应的前 `n` 个索引。`

``k = find(X,n,direction)`（其中 `direction` 为 `'last'`）查找与 `X` 中的非零元素对应的最后 `n` 个索引。`direction` 的默认值为 `'first'`，即查找与非零元素对应的前 `n` 个索引。`

``[row,col] = find(___)` 使用上述语法中的任何输入参量返回数组 `X` 中每个非零元素的行和列下标。`

``[row,col,v] = find(___)` 还返回包含 `X` 的非零元素的向量 `v`。`

## 示例

`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 ```

`X` 使用逻辑 `not` 运算符以查找零值。

`k2 = find(~X)`
```k2 = 4×1 2 3 4 6 ```

`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 ```

`X(k)`
```ans = 5×1 5 9 4 2 7 ```

`x = 1:2:20`
```x = 1×10 1 3 5 7 9 11 13 15 17 19 ```
`k = find(x==13)`
```k = 7 ```

`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 ```

```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 ```

`k = find(X,4,'last')`
```k = 4×1 30 32 34 36 ```

`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 ```

`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 ```

```X = zeros(4,2,3); X([1 12 19 21]) = 1```
```X = X(:,:,1) = 1 0 0 0 0 0 0 0 X(:,:,2) = 0 0 0 0 0 0 1 0 X(:,:,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 ```

## 输出参量

• 如果 `X` 是行向量，则 `k` 也是行向量。否则，`k` 为列向量。

• `X` 是空数组或没有非零元素时，`k` 是空行向量或空列向量。

• `find` 使用如下约定：当 `X` 为空矩阵 `[]` 时，`k` 也为空矩阵 `[]`

`X` 的非零元素，以向量的形式返回。

## 详细信息

### 线性索引

`sub2ind``ind2sub` 函数对于在下标和线性索引之间进行转换非常有用。

## 提示

• 要查找符合条件的数组元素，请结合使用 `find` 和关系表达式。例如，`find(X<5)` 返回 `X` 中小于 `5` 的元素的线性索引。

• 要直接查找 `X` 中满足条件 `X<5` 的元素，请使用 `X(X<5)`。尽量避免使用 `X(find(X<5))` 之类的函数调用，因为这种调用中对逻辑矩阵使用的 `find` 完全没有必要。

• `find``X>1` 之类的关系运算结合在一起执行时，必须记住关系运算的结果是由 1 和 0 组成的逻辑矩阵。例如，命令 `[row,col,v] = find(X>1)` 会返回由 `v` 的逻辑值 `1` (`true`) 组成的列向量。

• 行下标和列下标，即 `row``col``k`×`k = sub2ind(size(X),row,col)` 中的线性索引相关。