Удалить все пустые ячейки в массиве ячеек - PullRequest
2 голосов
/ 25 июня 2019

У меня есть массив ячеек, в которых я хочу выделить 3 строки, поэтому я использовал это temp = testresults(13:15,1:end).

Массив больше, я получаю много пустых ячеек

{'Summary Test Re…'}    {'Overall'   }    {0×0 char          }    {'OVP Transition …'}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}
{'Pass/Fail'       }    {'Passed'    }    {'No Transition t…'}    {'Passed'          }    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}
{'Failed cases'    }    {'No failure'}    {0×0 char          }    {'No failure'      }    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}

Следовательно, я пытаюсь удалить пустые ячейки, используя temp(~cellfun('isempty',temp)), но, если все пустые ячейки удалены, все мои данные помещаются в один столбец:

{'Summary Test Results'          }
{'Pass/Fail'                     }
{'Failed cases'                  }
{'Overall'                       }
{'Passed'                        }
{'No failure'                    }
{'No Transition time change'     }
{'OVP Transition level pass/fail'}
{'Passed'                        }
{'No failure'                    }

Я пробовал некоторые варианты функции, а также пытался с cat(2, temp{:}), но я не знаю, как сохранить данные в правильном положении.

Как я могу удалить пустые ячейки, не касаясь положения остальных данных?

1 Ответ

5 голосов
/ 25 июня 2019

Учитывая массив ячеек, подобный этому:

temp = {
'Summary Test Re…', 'Overall',    '', '',                 'OVP Transition …', '', '', '', ''
'Pass/Fail',        'Passed',     '', 'No Transition t…', 'Passed',           '', '', '', ''
'Failed cases',     'No failure', '', '',                 'No failure',       '', '', '', ''
'',                 '',           '', '',                 '',                 '', '', '', ''};

мы можем найти пустые ячейки (как вы уже узнали), используя

empty = cellfun('isempty',temp);

Далее, мы можем удалить строки, где всеячейки пустые с

temp(all(empty,2),:) = [];

и столбцы, в которых все ячейки пусты, с

temp(:,all(empty,1)) = [];

all(empty,1) возвращает вектор логической строки, где элемент равен true, если все ячейки в этомстолбец пуст.Мы используем этот логический вектор для индексации этих элементов массива и установки их в пустой массив.Назначение пустого массива - это выражение MATLAB для удаления элемента массива.Удаление полных строк и столбцов позволяет сохранить форму массива.

Обратите внимание на разницу между temp(:,1)=[] и temp{:,1}=[].Первый удаляет столбец элементов массива, второй назначает пустой массив каждой из ячеек в столбце массива ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...