想象一下,我在数组中有一系列不同大小的列向量,并希望通过用NaN
填充空格来将它们分组到矩阵中。我怎么能这样做?
对于一个非常类似的问题(accumulate cells of different lengths into a matrix in MATLAB?)已有答案,但该解决方案处理行向量,我的问题是列向量。一种可能的解决方案可以是转置每个阵列组件,然后应用上述解决方案。但是,我不知道该怎么做。
此外,速度是一个问题,所以如果可能的话考虑到这一点。
答案 0 :(得分:3)
您可以稍微调整that answer you found以适用于列:
tcell = {[1,2,3]', [1,2,3,4,5]', [1,2,3,4,5,6]', [1]', []'}; %\\ ignore this comment, it's just for formatting in SO
maxSize = max(cellfun(@numel,tcell));
fcn = @(x) [x; nan(maxSize-numel(x),1)];
cmat = cellfun(fcn,tcell,'UniformOutput',false);
cmat = horzcat(cmat{:})
cmat =
1 1 1 1 NaN
2 2 2 NaN NaN
3 3 3 NaN NaN
NaN 4 4 NaN NaN
NaN 5 5 NaN NaN
NaN NaN 6 NaN NaN
或者您可以调整this作为替代方案:
cell2mat(cellfun(@(x)cat(1,x,NaN(maxSize-length(x),1)),tcell,'UniformOutput',false))
答案 1 :(得分:2)
如果你想要速度,cell
数据结构就是你的敌人。对于这个例子,我假设你将这些向量存储在一个名为vector_holder
的结构中:
elements = fieldnames(vector_holder);
% Per Dan request
maximum_size = max(structfun(@max, vector_holder));
% maximum_size is the maximum length of all your separate arrays
matrix = NaN(length(elements), maximum_size);
for i = 1:length(elements)
current_length = length(vector.holder(element{i}));
matrix(i, 1:current_length) = vector.holder(element{i});
end
处理cell
变量时,许多Matlab函数都较慢。此外,具有cell
双精度元素的N
矩阵比具有N
元素的双精度矩阵需要更多内存。