Удалить NaN из клеточной матрицы в MATLAB - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть ячейка матрицы, содержащая числовые значения и NaN.Как я могу удалить значения NaN и «обрезать» свою матрицу.

Например, у меня есть следующая матрица:

A = { 1, 12, NaN; 1 ,4, NaN; 1 , 2 , NaN ; NaN, NaN, NaN; 1, 2, NaN };

Я хотел бы удалить NaN и изменить размер матрицы, чтобы иметьэта матрица.Можно ли это сделать без петли?(с использованием векторизации)

A = [ 1, 12; 1, 4; 1, 2; 1, 2];

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019
A = { 1, 12, NaN; 1 ,4, NaN; 1 , 2 , NaN ; NaN, NaN, NaN; 1, 2, NaN };
A = cell2mat(A) ;   % convert the given cell to matrix         
[m,n] = size(A) ;   % get size of the matrix 
A(sum(isnan(A),2)==n,:) = [] ;  % remove rows with all NaN's in a row 
[m,n] = size(A) ;   % get updated size of A 
A(:,sum(isnan(A),1)==m) = [] ;  % remove columns with all NaN's in a column 

Результат

 A = [1    12
      1     4
      1     2
      1     2]
0 голосов
/ 28 февраля 2019

На первый взгляд, я не вижу способа (автоматически) сохранить «форму» (размеры) матрицы.Для преобразования и извлечения существует простое решение:

B = cell2mat(A)
B =

     1    12   NaN
     1     4   NaN
     1     2   NaN
   NaN   NaN   NaN
     1     2   NaN

B = B(~isnan(B))
B =

    1
    1
    1
    1
   12
    4
    2
    2

Я еще подумаю об (автоматическом) изменении размера.

...