Removing NaN from cell array

I have cell array which ends with NaN as last row
'Mat Name' 'MAT Type' 'E1'
'GFRP' 'GFRP' 'GFRP'
'CFRP' 'CFRP' 'CFRP'
'KFRP' 'KFRP' 'KFRP'
'SCDB' 'SCDB' 'SCDB'
'ABCD' 'ABCD' 'ABCD'
[NaN] [NaN] [ NaN]
How to remove the NaN from the last row of cell array
thanks in advance

 Accepted Answer

Honglei Chen
Honglei Chen on 28 Jun 2012
Edited: Honglei Chen on 28 Jun 2012
x = {'xy','yz',nan}
x(cellfun(@(x) any(isnan(x)),x)) = []

8 Comments

Hello Thanks for your response i tried this command but the following error occurred
raw(cellfun(@isnan,raw)) = [] ??? Error using ==> cellfun Non-scalar in Uniform output, at index 1, output 1. Set 'UniformOutput' to false.
try:
x(cellfun(@isnan,x,'UniformOutput',false))
I've updated the answer
Its works for the array x which you shown but for the cell array
'Mat Name' 'MAT Type' 'E1'
'GFRP' 'GFRP' 'GFRP'
'CFRP' 'CFRP' 'CFRP'
'KFRP' 'KFRP' 'KFRP'
'SCDB' 'SCDB' 'SCDB'
'ABCD' 'ABCD' 'ABCD'
[NaN] [NaN] [ NaN]
its is not working, kindly help
Add
reshape(x,[],3)
after you run the command in my answer
!!wonderfull!! wow its work well, what is the logic behind it
cellfun will loop each cell for you to check whether a cell is nan or not, but it does not preserve the dimension. So you need to reshape it back at the end.
Another approach, which remove all non-strings: x = x(cellfun('isclass', x, 'char'))

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!