Asked by Susan
on 26 Apr 2019

Hey MATLAB guys,

I would like to replace all Nan in the following cell array r by a number. Could anyone please tell me how I can do that for the following problem? Thanks in advance

r = cell(sum(nL), numel(nL), numel(nW), max(nW(:)));

for k = 1 : numel(nW)

for m = 1 : nW(k)

for j = 1 : numel(nL)

for i = 1 : nL(j)

r{i + Nup*(j - 1), j, k, m} = .....

end

end

end

end

Answer by Guillaume
on 26 Apr 2019

Accepted Answer

Your question is not very unclear. You show a loop filling (part) of a cell array with ... something unspecified. Presumably, that something is a matrix or vector of varying size and not a scalar (otherwise you wouldn't be using a cell array) and maybe part (all?) of it can be NaN.

If you don't want NaNs in the something, simply replace them before copying the something in the cell array:

for ...

for ...

something = ...

something(isnan(something)) = somevalue; %replace NaNs by somevalue

r{..} = something;

end

end

Answer by Rik
on 26 Apr 2019

You can use the isnan function:

r = cell(sum(nL), numel(nL), numel(nW), max(nW(:)));

for k = 1 : numel(nW)

for m = 1 : nW(k)

for j = 1 : numel(nL)

for i = 1 : nL(j)

if isnan(r{i + Nup*(j - 1), j, k, m})

r{i + Nup*(j - 1), j, k, m} = .....

end

end

end

end

end

Susan
on 26 Apr 2019

Just a quick question,

this code just avoide the Nan, rigth? How does it replace the Nan with some other values?

Shouldn't it be something like

if isnan(r{i + Nup*(j - 1), j, k, m})

r{i + Nup*(j - 1), j, k, m} = 'a value'

else

r{i + Nup*(j - 1), j, k, m} = ....

end

Rik
on 27 Apr 2019

Susan
on 27 Apr 2019

Thank you so much for your reply. It helps a lot.

Sign in to comment.

Answer by Susan
on 29 Apr 2019

Hey guys! cI got another question regarding cell arrays. Any help would be greatly appreciated.

I want to implement fmincon() for this problem:

I am minimizing an objective function with respect to some variables. the variable has the following format

X = cell(max(I(:)), numel(I), numel(I), numel(M), max(M(:))))

and inside each cell I have a Nt*Nr matrix. The goal is to find the optimal values of each matrix.

I defined the symbolic array of X (I am not sure if I am doing it correctly, though) and pass it to my objective function to calculate the objective function as follows:

X = cell2sym(cell(max(I(:)), numel(I), numel(I), numel(M), max(M(:))));

objfun = f(X)

but, I get the following error:

Brace indexing is not supported for variables of this type.

while I am able to get the value of f(X0) without any issue. Could anyone please kindly explain what the problem is?

Thanks in advance

Opportunities for recent engineering grads.

Apply Today
## 2 Comments

## Rik (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/458811-replace-nan-by-a-number-in-a-cell-array#comment_698768

## Susan (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/458811-replace-nan-by-a-number-in-a-cell-array#comment_698770

Sign in to comment.