Come posso accumulare celle di diverse lunghezze in una matrice in MATLAB?

Quindi, ho una matrice cellulare di vettori 1xN di diverse lunghezze. Voglio aggiungerli in una matrice in modo da poterli visualizzare con imagesc . Ovviamente la matrice deve essere la larghezza del vettore più grande. Il mio codice corrente per questo è qui sotto:

 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 

Qualcuno conosce una soluzione vettoriale per questo tipo di problema? Non sono molto preoccupato della velocità di questo ciclo a causa del JIT di MATLAB. Sto solo cercando di ampliare le mie conoscenze e questo è un caso che mi capita spesso nella mia programmazione.

Ecco una soluzione che utilizza cellfun con una funzione anonima per cellfun prima ogni cella di valori NaN , quindi vertcat per mettere il contenuto della cella in una matrice:

 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 

E l’output:

 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