问题描述:我需要查找矩阵中每一行第一个小于0的元素的位置,最先想到的是按行循环,使用find函数,后来想到了一种使用逻辑矩阵的方法,方法为[~,ind] = max((A<=0),[],2),实例如下:
% 生成随机数
A = randn(5,8)
A =
-1.1480 0.1873 0.8404 -0.6003 -2.1384 0.1240 2.9080 -0.2725
0.1049 -0.0825 -0.8880 0.4900 -0.8396 1.4367 0.8252 1.0984
0.7223 -1.9330 0.1001 0.7394 1.3546 -1.9609 1.3790 -0.2779
2.5855 -0.4390 -0.5445 1.7119 -1.0722 -0.1977 -1.0582 0.7015
-0.6669 -1.7947 0.3035 -0.1941 0.9610 -1.2078 -0.4686 -2.0518
% 判断A<0,生成逻辑矩阵
tmp = A<=0
tmp =
5×8 logical 数组
1 0 0 1 1 0 0 1
0 1 1 0 1 0 0 0
0 1 0 0 0 1 0 1
0 1 1 0 1 1 1 0
1 1 0 1 0 1 1 1
% 使用max函数求位置,ind即为结果
[~,ind] = max(tmp,[],2)
ind =
1
2
2
2
1
% 代码合起来是:
[~,ind] = max((A<=0),[],2);
如果没有符合条件的数值,则会返回第一个位置(逻辑矩阵该行全为0)。如果能能判定位置1不符合条件,则可对位置为1 的结果复制NaN。之后再对求得的ind值进行相应的操作。