欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

程序员文章站 2024-01-31 14:08:12
今天在用matlab的时候又积累了两点,现在总结如下 1、Objective function is undefined at initial point. Fmincon cannot...

今天在用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的非零列,大家就自己会写了。

推荐阅读