Matlab矩阵查找每一行元素出现的位置

问题描述:我需要查找矩阵中每一行第一个小于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值进行相应的操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值