-
find函数
该函数可以查找非零元素的索引和值
例如:
X = 3×3 1 0 2 0 1 1 0 0 4
k = find(X) %返回非零元素的索引号,即按列检索对应数值的序号
k_0= find(~X) %返回零元素的索引号
matlab检索索引号的方式如下: 输出结果: k = 5×1 1 5 7 8 9
[row,col,value] = find(X)
%得到行号、列号和对应的数值
输出结果:
-
all函数
确定所有的数组元素是为非零还是 true
A = [0 1 3;1 1 3;0 0 3]
B = all(A)
%默认检索每列数据是否全为非0值
%若第j列全为非零值 则B(1,j)=1,若第j列至少有一个为零值 则B(1,j)=0
因为默认检索方式是按列去检索,可以使用其他方式去检索别的维度的数据
B = all(A,dim) %沿着 dim 维测试元素,dim 输入是一个正整数标量
A = [0 1 3;1 1 3;0 0 3]
B_col = all(A,1) %按列去检索
B_row = all(A,2) %按行去检索
B_pixel = all(A,3) %逐数值去检索,检索该数值位置的所有第三维度数据
综合使用以上两个函数便可以查找整行为0的行号并记录,使用all函数并设置一定的逻辑策略
- 使用“A==0”,将数值矩阵变为逻辑值矩阵,等于0的数值变为1,不等于0的值变为0
- 此时矩阵全为0或1,使用all(A==0,2) 在行方向上检索每一行是否全为非零值(即1),若此行数值全为1,则此行输出逻辑值1,若此行有一个或多个数值为0,则此行输出逻辑值0
- 此时矩阵为一列逻辑值,find函数找到逻辑值为1的行号
代码如下:
% 创建一个示例矩阵
A = [1 2 0 4 0; 0 6 0 8 0; 0 0 0 0 0; 9 0 7 0 0; 0 0 0 0 0];
% 找到等于零的元素所在的行号
zero_rows = find(all(A == 0, 2));
结果如下: