Arrays 将存储为单元阵列的不同大小的列向量累积到填充有NAN的矩阵中

Arrays 将存储为单元阵列的不同大小的列向量累积到填充有NAN的矩阵中,arrays,matlab,Arrays,Matlab,假设我在一个数组中有一系列大小不同的列向量,并希望通过使用NaN填充空格将它们分组到一个矩阵中。我该怎么做 对于一个非常类似的问题()已经有了答案,但该解决方案涉及行向量,而我的问题是列向量。一种可能的解决方案可以是转置每个阵列组件,然后应用上述解决方案。然而,我不知道该怎么做 此外,速度也是一个问题,因此如果可能的话,请考虑到这一点。您只需稍微调整一下即可用于列: tcell = {[1,2,3]', [1,2,3,4,5]', [1,2,3,4,5,6]', [1]', []'};

假设我在一个数组中有一系列大小不同的列向量,并希望通过使用
NaN
填充空格将它们分组到一个矩阵中。我该怎么做

对于一个非常类似的问题()已经有了答案,但该解决方案涉及行向量,而我的问题是列向量。一种可能的解决方案可以是转置每个阵列组件,然后应用上述解决方案。然而,我不知道该怎么做


此外,速度也是一个问题,因此如果可能的话,请考虑到这一点。

您只需稍微调整一下即可用于列:

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
或者你也可以做一些调整:

cell2mat(cellfun(@(x)cat(1,x,NaN(maxSize-length(x),1)),tcell,'UniformOutput',false))

如果你想提高速度,那么
单元
数据结构就是你的敌人。在本例中,我假设您将这些向量存储在一个名为
vector\u 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

许多Matlab函数在处理
单元
变量时速度较慢。此外,具有
N
双精度元素的
单元格
矩阵比具有
N
元素的双精度矩阵需要更多内存。

您应该添加如何从
vector\u holder
中查找
最大大小
是否测试了
最大大小=max(structfun(@max,vector\u holder))
?在Octave Online上,它给出了一个错误(这个错误让我相信
structfun
会在内部将您的struct转换为
Cellray
,因此会失去它可能拥有的任何内存优势。另外,添加
'uni',false
也没有帮助),但它可能在Matlab中工作-请确认。@Dan甚至可以去掉for循环,但代码看起来很糟糕。@Dan是的,它在Matlab中工作。不幸的是,我无法访问倍频程。+1然后,我现在无法访问Matlab,这就是我检查的原因。我想这是两种语言不同的情况之一。谢谢,它起作用了。我不能投票给你,因为我没有足够的分数,但一旦我做到了,我保证我会的。谢谢你的快速回答!