Remove NaN from doubles within a cell array
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Jonathan Soucy
am 7 Jul. 2017
Beantwortet: Pruthvi G
am 12 Mär. 2020
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 Kommentar
Akzeptierte Antwort
Star Strider
am 7 Jul. 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 Kommentar
Walter Roberson
am 7 Jul. 2017
Note: isfinite is not the same as ~isnan() in that isfinite excludes +inf and -inf
Weitere Antworten (3)
Geoff Hayes
am 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)
0 Kommentare
Walter Roberson
am 7 Jul. 2017
Bearbeitet: Walter Roberson
am 7 Jul. 2017
result = cellfun(@(M) M(~isnan(M)), ab, 'Uniform', 0)
0 Kommentare
Siehe auch
Kategorien
Mehr zu NaNs finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!