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,这就是我检查的原因。我想这是两种语言不同的情况之一。谢谢,它起作用了。我不能投票给你,因为我没有足够的分数,但一旦我做到了,我保证我会的。谢谢你的快速回答!