Как я могу накопить ячейки различных длин в матрицу в MATLAB?

Так, у меня есть массив ячеек 1xN векторы различных длин. Я хочу добавить их в матрицу, таким образом, я могу отобразить их с imagesc. Очевидно, матрица должна быть шириной самого большого вектора. Мой текущий код для этого ниже:

tcell = {[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6], [1], []};
lens = cellfun('length', tcell);
rmat = NaN(length(tcell), max(lens));
for i = 1:length(tcell)
    rmat(i, 1:lens(i)) = tcell{i};
end

Кто-либо знает векторизованное решение для этого типа проблемы? Я действительно не волнуюсь по поводу скорости этого цикла из-за JIT MATLAB. Я просто пытаюсь развернуть свое знание, и это - случай, с которым я сталкиваюсь довольно часто в моем программировании.

10
задан gnovice 6 July 2010 в 04:01
поделиться

1 ответ

Вот одно решение, которое использует cellfun с анонимной функцией , чтобы сначала заполнить каждую ячейку значениями NaN , затем ] vertcat , чтобы поместить содержимое ячейки в матрицу:

tcell = {[1 2 3], [1 2 3 4 5], [1 2 3 4 5 6], [1], []};  % Sample cell array

maxSize = max(cellfun(@numel, tcell));               % Get the maximum vector size
fcn = @(x) [x nan(1, maxSize-numel(x))];             % Create an anonymous function
rmat = cellfun(fcn, tcell, 'UniformOutput', false);  % Pad each cell with NaNs
rmat = vertcat(rmat{:});                             % Vertically concatenate cells

И вывод:

rmat =

     1     2     3   NaN   NaN   NaN
     1     2     3     4     5   NaN
     1     2     3     4     5     6
     1   NaN   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN   NaN   NaN
13
ответ дан 3 December 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: