Как объединить векторы разной длины в массиве ячеек в матрицу в MATLAB - PullRequest
3 голосов
/ 02 июня 2011

Как эффективно объединить векторы массива ячеек с различной длиной в матрицу, заполняя векторы до максимальной длины нулями или NaN? Это был бы хороший вариант для cell2mat().

Например, если у меня есть

C = {1:3; 1:5; 1:4};

Я бы хотел получить либо

M = [1 2 3 0 0
     1 2 3 4 5
     1 2 3 4 0];

или

M = [1 2 3 NaN NaN
     1 2 3 4 5
     1 2 3 4 NaN];

1 Ответ

3 голосов
/ 02 июня 2011

EDIT:

Для ячейки из строки векторов, как в вашем случае, это будет заполнять векторы нулями для формирования матрицы

out=cell2mat(cellfun(@(x)cat(2,x,zeros(1,maxLength-length(x))),C,'UniformOutput',false))

out =

     1     2     3     0     0
     1     2     3     4     5
     1     2     3     4     0

A аналогичный вопрос был задан ранее сегодня, и хотя вопрос был сформулирован несколько иначе, мой ответ в основном делает то, что вы хотите.

Копируя соответствующие части здесь, ячейка с неровными столбцами векторов может быть дополнена нулями в матрице как:

out=cell2mat(cellfun(@(x)cat(1,x,zeros(maxLength-length(x),1)),C,'UniformOutput',false));

, где maxLength предполагается известным. В вашем случае у вас есть векторы строк, что является лишь незначительной модификацией.

Если maxLength неизвестно, вы можете получить его как

maxLength=max(cellfun(@(x)numel(x),C));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...