matlab 中去除含有NaN的行或者列

今天在用matlab的时候又积累了两点,现在总结如下

1、Objective function is undefined at initial point. Fmincon cannot continue.错误解决

在使用fmincon时出现该错误很有可能是你求解的输入矩阵里面存在了非数字的值,例如nan等,请仔细检查输入的参数矩阵是否含有nan等,如果有就要去掉。

2、那么如何去掉矩阵里面含有nan的行或者列呢?

去掉某一个位置上的nan比较容易,但是去掉nan所在的行或者列的话机比较难想了,前提是你对matlab用的不是很熟,如果很熟悉的话就另当别论。

不废话,直接说出解决办法,加入有矩阵

A=[1,2,NaN;

    3,NaN,4;

    5,6,7   ]

如果你是一行表示一个样本的话,那么第一行和第二行就得剔除,因为它们的特征值含有NaN。

只要一句代码就可以完成了

A=(all(~isnan(A),2),:);

(1)就这么简单,其中里面用到了all函数,all(A,2)的意思是如果A的某行没有非零值,那么改行返回值为1,如果改行包含了非零值,则改行返回值为0,最终返回一个列向量。每一个元素表示A的某行是否都是非零值。1表示某行全部是非零值,0表示不是。i

(2)isnan就不用介绍了,自行百度

(3)和all相同的用法还有any,也可以改用any来做,提取不含Nan的非零列,大家就自己会写了。



  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值