Finding NaNs in cell array.

조회 수: 36 (최근 30일)
Rajesh Patel
Rajesh Patel 2016년 5월 20일
답변: Pruthvi G 2020년 3월 12일
I create a cell array by importing some data (text and empty cells) from excel. It looks like this.. "Data_text =
Columns 1 through 7
'Speed' 'Load' [NaN] 'Sample' 'Calgen_Model' 'DOE_BSNOx' 'DOE_Pmax'
I want to find columns which contains NaN (from empty cells in excel) and delete those columns. I tried following but it does not seems to work.
Column_Names = cell2table(Data_text);
a = cellfun(@isnan,Data_text);
Thanks,
  댓글 수: 1
Pruthvi G
Pruthvi G 2020년 3월 12일
Data(cellfun(@(cell) any(isnan(cell(:))),Data))={''};

댓글을 달려면 로그인하십시오.

답변 (3개)

Fangjun Jiang
Fangjun Jiang 2016년 5월 20일
Data_text={'Speed' 'Load' [NaN] 'Sample'};
index=cellfun(@isnan,Data_text,'uni',false);
index=cellfun(@any,index);
Data_text(index)=[];
  댓글 수: 2
Rajesh Patel
Rajesh Patel 2016년 5월 20일
Thanks seems to be working. But I have couple of questions if you do not mind.
  1. # What does the line "index=cellfun(@any,index);" do?
  2. # Now if in the original array of "Data_text" had multiple rows and if I wanted to find NaN only in 1st row and delete columns corresponding to it, what modification to code need to be done?
Again, Thanks for quick answer.
Fangjun Jiang
Fangjun Jiang 2016년 5월 20일
Data_text={'a','b', nan ,'c';1,2,3,4};
index=cellfun(@isnan,Data_text(1,:),'uni',false);
index=cellfun(@any,index);
Data_text(:,index)=[];
The first index is still a cell array. Use cellfun(@any,...) to get the logical index. Type "help any" to find the info for the any() function.

댓글을 달려면 로그인하십시오.


Azzi Abdelmalek
Azzi Abdelmalek 2016년 5월 20일
Data_text={'Speed' 'Load' nan 'Sample'}
Data_text(:,cellfun(@(x) any(isnan(x)),Data_text(1,:)))=[]

Pruthvi G
Pruthvi G 2020년 3월 12일
Data(cellfun(@(cell) any(isnan(cell(:))),Data))={''};

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by