replacing NaN with zeros in a cell column of strings

Dear all,
I have this column
A={[NaN]
[NaN]
[NaN]
[NaN]
[NaN]
'ka'
[NaN]
[NaN]
'jdfksjkg'
'ldsiu'
[NaN]
[NaN]
'jdfkkg'
'jdfkkg'
};
and I want to replace the NaN with zeros that is ,
A={[0]
[0]
[0]
[0]
[0]
'ka'
[0]
[0]
'jdfksjkg'
'ldsiu'
[0]
[0]
'jdfkkg'
'jdfkkg'
};
Is there a way of doing that in matlab?
Thanks in advance

 Accepted Answer

Are the NaNs the only non-CHAR elements? Then:
A(~cellfun('isclass', A, 'char')) = {0};

1 Comment

thanks Jan. I have columns of dimension 200000 by 1. so I want to avoid using loops

Sign in to comment.

More Answers (2)

One way is just with a for loop:
for ii = 1:length(A)
if isnan(A{ii})
A{ii} = 0;
end
end

4 Comments

thanks for the reply. I am looking for something simpler; that is, without loop. Any other suggestion?
Wow, 5 lines is too complicated?!? Any shorter way is likely to be more obtuse, not as straightforward and easy to follow, and harder to maintain because it'd be more cryptic. What's wrong with a loop, especially for only 14 variables? I mean, it's not like you have tens of millions or anything, so speed is definitely NOT going to be an issue.
This is the most simplest method. +1
isnan doesnt work for cells...can anyone help?
If i separate out the individual cell with NaN it works but not in the loop
ix=cellfun(@isempty,spiketimes);
spiketimes(ix)={0} ; %which I wish would just put 0's
for ii = 1:length(spiketimes)
if isnan(spiketimes{ii})
spiketimes{ii} = 0;
end end
results = spiketimes{j};
%n = length(results(j,:));
plot([results{:} ; results{:}], [ones(1,n)*j-1;ones(1,n)*j],'k-'); end; end;
Undefined function 'isnan' for input arguments of type 'cell'.
this is at the end of my code..would appreciate any help

Sign in to comment.

Cedric
Cedric on 25 Apr 2013
Edited: Cedric on 25 Apr 2013
You can go for something like:
A(cellfun(@(x)all(x~=x), A)) = {0} ;
but it is just "cosmetic" (in some sense) and the loop proposed by Wayne (with a little update so it manages well non-scalar content) is likely to be more efficient.

2 Comments

Any other sugestion?
thanks
@antonet: You got two working solutions. Asking for more solutions without explaining, why you are not satisfied already, is not efficient. Please do not let us guess, what you are exactly looking for, because this wastes your and our time.

Sign in to comment.

Categories

Tags

Asked:

on 24 Apr 2013

Edited:

on 22 Mar 2015

Community Treasure Hunt

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

Start Hunting!