matlab中find 查找非零元素的索引和值


來源:https://ww2.mathworks.cn/help/matlab/ref/find.html?searchHighlight=find&s_tid=doc_srchtitle

 

find

查找非零元素的索引和值

全頁折疊
 

說明

示例

k = find(X) 返回一個包含數組 X 中每個非零元素的線性索引的向量。

  • 如果 X 為向量,則 find 返回方向與 X 相同的向量。

  • 如果 X 為多維數組,則 find 返回由結果的線性索引組成的列向量。

  • 如果 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

 

示例

全部折疊

矩陣中的零和非零元素

在 3×3 矩陣中查找非零元素。

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

 
 

滿足一個條件的元素

在 4×4 幻方矩陣中查找前五個小於 10 的元素。

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 的對應元素。

X(k)
ans = 5×1

     5
     9
     4
     2
     7

 
 

等於特定值的元素

要查找特定的整數值,請使用 == 運算符。例如,在 1×10 的奇整數向量中查找等於 13 的元素。

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
 
 

最后幾個非零元素

創建一個由等於零的所有奇數索引元素組成的 6×6 幻方矩陣。

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

 
 

滿足多個條件的元素

在 4×4 矩陣中查找前 3 個大於 0 且小於 10 的元素。指定兩個輸出以便將行和列下標返回到這些元素。

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(2,1),即 8

 
 

非零元素的下標和值

在 3×3 矩陣中查找非零元素。指定三個輸出以返回行下標、列下標和元素值。

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

 
 

多維數組的下標

在 4×2×3 數組中查找非零元素。指定兩個輸出 rowcol 以返回非零元素的行和列下標。如果輸入是多維數組 (N > 2),find 返回 col 作為 XN-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 - 輸入數組
標量 | 向量 | 矩陣 | 多維數組

輸入數組,指定為標量、向量、矩陣或多維數組。如果 X 為空數組或不含非零元素,則 k 為空數組。

數據類型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
復數支持:

n - 要查找的非零元素數量
正整數標量

要查找的非零元素數量,指定為正整數標量。默認情況下,find(X,n) 查找 X 中的前 n 個非零元素。

direction - 搜索方向
'first' (默認) | 'last'

搜索方向,指定為字符串 'first''last'。使用 find(X,n,'last')X 中查找 n 個非零元素。

輸出參數

全部折疊

k - 指向非零元素的索引
向量

指向非零元素的索引,以向量的形式返回。如果 X 是行向量,則 k 也是行向量。否則 k 是列向量。X 是空數組或不含非零元素時,k 為空數組。

可以使用 X(k) 返回 X 中的非零值。

row - 行下標
向量

行下標,以向量的形式返回。rowcol 一起指定與 X 中的非零元素對應的 X(row,col) 下標。

col - 列下標
向量

列下標,以向量的形式返回。rowcol 一起指定與 X 中的非零元素對應的 X(row,col) 下標。

如果 X 是多維數組且 N> 2,則 colXN-1 尾部維度的線性索引。這會保留關系 X(row(i),col(i)) == v(i)

v - X 的非零元素
向量

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

詳細信息

全部折疊

線性索引

線性索引允許使用單個下標創建指向數組的索引,例如A(k)。MATLAB® 將該數組視為單列向量,其中每一列附加到前一列的底部。因此,線性索引從上到下、從左到右對列中的元素編號。

例如,假設一個 3×3 矩陣。您可以用 A(5) 來引用 A(2,2) 元素,用 A(8) 來引用 A(2,3) 元素。線性索引根據數組大小而改變;A(5) 會為 3×3 矩陣和 4×4 矩陣返回不同位置上的元素。

sub2indind2sub 函數對於在下標和線性索引之間進行轉換非常有用。

提示

  • 要查找符合條件的數組元素,請結合使用 find 和關系表達式。例如,find(X<5) 返回 X 中小於 5 的元素的線性索引。

  • 要直接查找 X 中滿足條件 X<5 的元素,請使用 X(X<5)。盡量避免使用 X(find(X<5)) 之類的函數調用,因為這種調用中對邏輯矩陣使用的 find 完全沒有必要。

  • findX>1 之類的關系運算結合在一起執行時,必須記住關系運算的結果是由 1 和 0 組成的邏輯矩陣。例如,命令 [row,col,v] = find(X>1) 會返回由 v 的邏輯值 1 (true) 組成的列向量。

  • 行下標和列下標,即 rowcolk×k = sub2ind(size(X),row,col) 中的線性索引相關。

擴展功能

用法說明和限制:

  • X 必須是 tall 列向量。

有關詳細信息,請參閱 tall 數組

C/C++ 代碼生成
使用 MATLAB® Coder™ 生成 C 代碼和 C++ 代碼。

用法說明和限制:

 

  • 如果可變大小輸入在運行時變為行向量,代碼生成將結束並報告錯誤。當輸入為標量或可變長度行向量時,此限制不適用。

  • 對於可變大小輸入,空輸出(0×0、0×1 或 1×0)的形狀取決於輸入大小的上限。當輸入數組在運行時為標量或 [] 時,輸出可能與 MATLAB 不匹配。如果輸入為可變長度行向量,則空輸出的大小為 1×0。否則,大小為 0×1。

  • 生成的代碼始終返回可變長度向量。即使您提供輸出向量 k,輸出也不是固定大小,因為輸出可以包含少於 k 個元素。例如,find(x,1) 返回具有一個或零個元素的可變長度向量。

 

此函數完全支持 GPU 數組。有關詳細信息,請參閱Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。

此函數完全支持分布式數組。有關詳細信息,請參閱Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。

在 R2006a 之前推出

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM