Remove NaN from doubles within a cell array
    조회 수: 8 (최근 30일)
  
       이전 댓글 표시
    
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
채택된 답변
  Star Strider
      
      
 2017년 7월 7일
        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
  Walter Roberson
      
      
 2017년 7월 7일
				Note: isfinite is not the same as ~isnan() in that isfinite excludes +inf and -inf
추가 답변 (3개)
  Geoff Hayes
      
      
 2017년 7월 7일
        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
  Walter Roberson
      
      
 2017년 7월 7일
        
      편집: Walter Roberson
      
      
 2017년 7월 7일
  
         result = cellfun(@(M) M(~isnan(M)), ab, 'Uniform', 0)
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




