如何在MATLAB中将不同长度的细胞堆积成matrix?
所以,我有一个不同长度的1xN向量的单元arrays。 我想把它们追加到一个matrix,所以我可以用imagesc
显示它们。 显然matrix必须是最大向量的宽度。 我目前的代码如下:
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
有没有人知道这种types的问题的vector化解决scheme? 由于MATLAB的JIT,我并不担心这个循环的速度。 我只是想扩大我的知识面,这是我在编程中经常碰到的一个例子。
下面是一个使用CELLFUN和匿名函数的解决scheme,首先使用NaN
值填充每个单元格,然后使用VERTCAT将单元格放入matrix中:
>> 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