matlab 中去除含有NaN的行或者列
阿新 • • 發佈:2019-02-06
今天在用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的非零列,大家就自己會寫了。