1. 程式人生 > >matlab 中去除含有NaN的行或者列

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的非零列,大家就自己會寫了。