在编程的时候,经常用到的一个需求是获取一个向量中满足某个条件的对应索引,可以用Matlab内置find函数,以下为一些常用法:
- 用法1:矩阵中的零和非零元素
% k = find(X),返回X中每个非零元素的索引
% 如果X是向量,则返回方向与X相同的向量
% 如果X是多维数组,则返回由结果的线性索引组成的列向量
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]'
- 用法2——满足一个条件的元素
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,n)
% 返回与X中的非零元素对应的前n个索引
k = find(X<10,5)
% 返回 k = [2,3,4,5,7]'
% 查看对应的元素
X(k)
% 返回 ans = [5,9,4,2,7]'
- 用法3——最后几个满足条件的元素
% k = find(X,n,direction)
% direction可以控制查询方向,'last'代表满足条件的最后n个索引
% 'first'代表满足条件的前n个索引
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 = [30,32,34,36]'
- 用法4——满足多个条件
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);
- 用法5——返回下标和值
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]'