前言
昨天在使用Matlab
讀取Excel
數據時,發(fā)現在讀取時Matlab會將空白數據讀取為NaN
壤靶,將其它數據以字符串的形式進行存儲叉抡,最終的結果為一個二維的Cell
數組。然而勤婚,在去除數組中的NaN
數據時,遇到了麻煩涤伐。在查閱了各方資料后馒胆,才發(fā)現了解決方法,在這里記錄一下凝果。
正文
這里以一個以為的Cell
為例祝迂,二維數組也是一樣的用法:
a={'q','b',NaN,'ad'};
如果我們使用isnan
函數來判斷的話,會出現錯誤:
isnan(a(1))
error: Undefined function 'isnan' for input arguments of type 'cell'.
由于cell
類型無法使用=
來判斷豆村,而isnan
又出錯液兽。為了解決這個問題,經過在網上各方百度掌动,大多采用下面一種方法:
%方法一:
% 找到內容為 NaN 的元胞四啰,是NaN相應位置置1,否則置0粗恢;
temp1=cellfun(@(x) sum(isnan(x)),a,'uniformoutput',false);
% 將cell數組轉換成double數組
temp2=cell2mat(temp1);
% 找到值為1的元素
index=find(temp2==1);% 將相應位置的NaN換成想要的字符柑晒,比如空格 {' '}
index
即是NaN
元素所在的位置,這樣就可以解決這個問題了眷射。
后來在思考這個問題的時候匙赞,發(fā)現了之前isnan
不能使用的原因,取cell
數組元素時應該使用{}
而不是()
妖碉。所以isnan
的正確用法為:
isnan(a{1})
cellfun
方法在取元素時就是以{}
來取的涌庭。由此,可得到第二種方法為:
%方法二:
% 找到內容為 NaN 的元胞欧宜,是NaN相應位置置1坐榆,否則置0;
temp1=cellfun(@(x) length(find(isnan(x))),a,'uniformoutput',false);%此行不同
% 將cell數組轉換成double數組
temp2=cell2mat(temp1);
% 找到值為1的元素
index=find(temp2==1);% 將相應位置的NaN換成想要的字符冗茸,比如空格 {' '}
index
即是NaN
元素所在的位置席镀,二維數組的使用同理。