Effacer les filtres
Effacer les filtres

Remove NaN from doubles within a cell array

5 vues (au cours des 30 derniers jours)
Jonathan Soucy
Jonathan Soucy le 7 Juil 2017
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 commentaire
Pruthvi G
Pruthvi G le 12 Mar 2020
ab(cellfun(@(cell) any(isnan(cell(:))),ab))={''};

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 7 Juil 2017
Try this:
ab = {[1 2 NaN 3 4];[1 3 4 NaN 5 6 7 NaN]};
Output = cellfun(@(x) x(isfinite(x)), ab, 'UniformOutput',false);
Out1 = Output{1} % Display Output (Delete)
Out2 = Output{2} % Display Output (Delete)
Out1 =
1 2 3 4
Out2 =
1 3 4 5 6 7
  1 commentaire
Walter Roberson
Walter Roberson le 7 Juil 2017
Note: isfinite is not the same as ~isnan() in that isfinite excludes +inf and -inf

Connectez-vous pour commenter.

Plus de réponses (3)

Geoff Hayes
Geoff Hayes le 7 Juil 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
Walter Roberson le 7 Juil 2017
Modifié(e) : Walter Roberson le 7 Juil 2017
result = cellfun(@(M) M(~isnan(M)), ab, 'Uniform', 0)

Pruthvi G
Pruthvi G le 12 Mar 2020
ab(cellfun(@(cell) any(isnan(cell(:))),ab))={''};

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by