在 Matlab 中查詢陣列中的值的索引

Ammar Ali 2021年11月29日
在 Matlab 中查詢陣列中的值的索引

本教程將討論使用 MATLAB 中的 find() 函式在陣列中查詢值的索引。

在 MATLAB 中使用 find() 函式在陣列中查詢值的索引

在陣列中,元素被放置在從 1 開始的某些索引上,依此類推。要在給定陣列中查詢值的索引,我們可以使用 find() 函式。find() 函式用於查詢陣列或矩陣中元素的索引和值。要查詢元素的索引,我們需要在 find() 函式中定義一個條件。例如,如果我們想找到單個元素的索引,我們可以在 find() 函式中使用相等運算子。如果相同的元素出現在不同的索引處,find() 函式將返回該元素所在的所有索引。我們可以在這個函式中使用各種條件語句。例如,假設我們要查詢大於某個數字的所有元素的索引。在這種情況下,我們可以使用大於運算子,它將返回大於該特定數字的所有元素的索引。例如,讓我們找到給定陣列中存在的單個元素的索引。請參閱下面的程式碼。

mat = [2 3 1 2];
indices = find(mat==2)

輸出:

indices =

     1     4

變數索引在上述輸出中包含兩個值,這意味著該元素出現在陣列或向量內的索引 1 和 4 處。現在讓我們考慮一下,我們想要找到大於 1 的元素的索引。我們需要更改 find() 函式內的條件。我們將使用大於號運算子,而不是使用等於運算子。請參閱下面的程式碼。

mat = [2 3 1 2];
indices = find(mat>1)

輸出:

indices =

     1     2     4

在上面的輸出中,變數索引包含三個值,如你所見,給定陣列或向量中的三個元素大於一。如果我們有一個矩陣並想在向量中找到一個元素的位置,我們可以使用 find() 函式。我們知道矩陣內的元素放在特定的行和列上,為了找到特定的行和列,我們可以使用 find() 函式。如果元素存在於多個位置,則 find() 函式將為行和列返回多個值。請參閱下面的程式碼。

mat = [2 3 ; 2 1]
[row, col] = find(mat==2)

輸出:

mat =

     2     3
     2     1


row =

     1
     2


col =

     1
     1

在上面的輸出中,矩陣有兩行兩列,行列向量的第一個值是元素的第一個位置,即第 1 行和第 1 列,行和列的第二個值是元素的第一個位置元素的第二個位置,即第 2 行和第 1 列。如果要在給定矩陣中查詢元素 2 的索引,find() 函式將返回 1 和 2,因為在矩陣的情況下,這些值是按列放置的。這意味著值 2 位於索引 1 和 2,值 3 位於索引 3,值 1 位於索引 4。因此,如果不是兩個輸出變數,而是隻傳遞一個變數,find() 函式將返回索引列。例如,讓我們找到元素的索引並將它們替換為另一個值。請參閱下面的程式碼。

mat = [2 3 ; 2 1]
indices = find(mat==2)
mat(indices) = 5

輸出:

mat =

     2     3
     2     1


indices =

     1
     2


mat =

     5     3
     5     1

在上面的程式碼中,首先,我們找到元素 2 的索引,然後使用索引將值替換為 5,如你所見,矩陣值已更改。如果你出於某種原因不想使用 find() 函式,你始終可以使用 for 迴圈和 if 語句來建立你的函式。你需要遍歷陣列或矩陣的所有元素,並使用 if 語句檢查當前值是否與你想要的值匹配。如果它與你想要的值匹配,你可以儲存它的索引並繼續,直到你檢查了陣列中存在的所有元素。例如,讓我們使用 for 迴圈和 if 語句來查詢向量或陣列的索引。請參閱下面的程式碼。

mat = [2 3 2 1]
indices = [];
for i=1:length(mat)
    if(mat(i) == 2)
        indices = [indices i];
    end
end
indices

輸出:

mat =

     2     3     2     1


indices =

     1     3

在上面的程式碼中,我們用一個空向量初始化了變數索引。當值二與陣列內的任何元素匹配時,我們將將該索引儲存在 indices 變數中。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相關文章 - MATLAB Array