una programacion matriz matrices llenar extraer elementos datos cambiar arreglos almacenar agregar matlab matrix cell-array

programacion - ¿Cómo puedo acumular células de diferentes longitudes en una matriz en MATLAB?



llenar un vector en matlab (1)

Entonces, tengo una matriz de células de vectores 1xN de diferentes longitudes. Quiero agregarlos a una matriz para que pueda mostrarlos con imagesc . Obviamente, la matriz debe ser del ancho del vector más grande. Mi código actual para esto está a continuación:

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

¿Alguien sabe una solución vectorizada para este tipo de problema? No estoy realmente preocupado por la velocidad de este ciclo debido al JIT de MATLAB. Solo intento expandir mi conocimiento y este es un caso que encuentro con bastante frecuencia en mi programación.


Aquí hay una solución que usa CELLFUN con una función anónima para primero rellenar cada celda con valores NaN , luego VERTCAT para poner las celdas en una matriz:

>> tcell = {[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6], [1], []}; %# Sample 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