一起來學演化計算-matlab基本函數find
覺得有用的話,歡迎一起討論相互學習~




語法
- k = find(X)
- k = find(X)返回一個向量,其中包含數組X中每個非零元素的 線性索引 。
- 如果X是一個向量,那么find返回一個與X方向相同的向量
- 如果X是一個多維數組,那么find返回結果的線性索引的列向量
- 如果X不包含非零元素或為空,則find返回一個空數組
- k = find(X,n) k = find(X,n)返回與X中的非零元素對應的前n個索引
- k = find(X,n,direction) k = find(X,n,direction),其中direction為'last',查找X中的最后n個非零元素
- [row,col] = find( ___ ) 使用前面語法中的任何輸入參數返回數組X中每個非零元素的行和列下標
- [row,col,v] = find( ___ ) 返回向量v,其中包含X的非零元素
find:找出向量或矩陣中非零元素的位置標識
- 在許多情況下,都需要對矩陣中符合某一特定條件的元素的位置進行定位,如將某一矩陣中為零的元素設為1等。如果這個矩陣的元素非常多,手工修改非常麻煩,靈活運用find函數和各種邏輯及關系運算可以是實現絕大多數條件的元素定位。find函數的基本用法有k=find(A),[i,j]=find(A),[i,j,v]=find(A),這是個很有用的邏輯函數,在對數組元素進行查找,替換和修改變化等操作中占有非常重要的地位。
k=find(A)
- 此函數返回由矩陣A的所有非零元素的位置標識組成的向量。如果沒有非零元素會返回空值。
二維數組先尋找列再尋找行

三維數組尋找值

[i,j]=find(A)
- 此函數返回矩陣A的非零元素的行和列的表示,其中i代表行標而j代表列標。此函數經常用在稀疏矩陣中。在多維矩陣中通常將第一維用i表示,將其余各維作為第二維,用j表示。

[i,j,v]=find(A)
- 此函數返回矩陣A的非零元素的行和列的標識,其中i代表行標而j代表列表,同時,將相應的非零元素的值放入列向量v中,即i和j的值與[i,j]=find(A)取值相同,只是增加了非零元素的值這一項

利用find()函數實現部分矩陣的替換

示例
找到矩陣中的零元素和非零元素
X = [1 0 2; 0 1 1; 0 0 4]
X =
1 0 2
0 1 1
0 0 4
k = find(X)
k =
1
5
7
8
9
% 順序是從上往下從左至右進行排列的
k2 = find(~X)
k2 =
2
3
4
6
找到滿足特定條件的元素
X = magic(4)
X =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
k = find(X<10,5)
k =
2
3
4
5
7
X(k)
ans =
5
9
4
2
7
元素等於特定數值
x = 1:2:20
x =
1 3 5 7 9 11 13 15 17 19
k = find(x==13)
k =
7
- 要查找非整數值,請使用基於數據的容差值。否則,由於浮點舍入錯誤,結果有時是一個空矩陣
y = 0:0.1:1
y =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Columns 8 through 11
0.7000 0.8000 0.9000 1.0000
k = find(y==0.3)
k =
Empty matrix: 1-by-0
k = find(abs(y-0.3) < 0.001)
k =
4
尋找最后幾個非零項目
X = magic(6);
X(1:2:end) = 0 % 索引從左上角往下后往右
X =
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 =
30
32
34
36
尋找滿足多約束
- 找出4×4矩陣中大於0小於10的前三個元素。指定兩個輸出,將行和列下標返回給元素
X = [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21]
X =
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 =
2
3
4
col =
1
1
1
非零元素的下標和值
- 求3×3矩陣中的非零元素。指定三個輸出來返回行下標、列下標和元素值
X = [3 2 0; -5 0 7; 0 0 1]
X =
3 2 0
-5 0 7
0 0 1
[row,col,v] = find(X)
row =
1
2
1
2
3
col =
1
1
2
3
3
v =
3
-5
2
7
1
輸入參數

輸出參數
