Remove NaN from doubles within a cell array
Show older comments
For example, how would I get this:
ab = {[1 2 NaN 3 4];[1 3 4 NaN 5 6 7 NaN]}
to output
ab = {[1 2 3 4];[1 3 4 5 6 7]}
I've tried
ab(cellfun(@(x) all(isnan(x)),ab)) = []
but it doesn't work
1 Comment
Pruthvi G
on 12 Mar 2020
ab(cellfun(@(cell) any(isnan(cell(:))),ab))={''};
Accepted Answer
More Answers (3)
Geoff Hayes
on 7 Jul 2017
Jonathan - remember that the output of cellfun will be a cell array, so the code that you have above will work i.e. using a cell array as the indices into ab. Try defining a function that will do this for you, creating a function named removeNaNs and saving it to a file named removeNaNs.m
function [ab] = removeNaNs(ab)
ab = cellfun(@(x)removeNaNsPriv(x), ab, 'UniformOutput', false);
function [z] = removeNaNsPriv(z)
z(isnan(z)) = [];
We use the second function (saved within the removeNaNs.m file) as a "helper" function to remove the NaNs from an array. From the command line, you would call this code as
>> ab = {[1 2 NaN 3 4];[1 3 4 NaN 5 6 7 NaN]};
>> removeNaNs(ab)
Walter Roberson
on 7 Jul 2017
Edited: Walter Roberson
on 7 Jul 2017
result = cellfun(@(M) M(~isnan(M)), ab, 'Uniform', 0)
Pruthvi G
on 12 Mar 2020
ab(cellfun(@(cell) any(isnan(cell(:))),ab))={''};
Categories
Find more on Image Arithmetic in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!