我有一个元胞数组。每个单元格包含一个可变长度的向量。例如:
example_cell_array=cellfun(@(x)x.*rand([length(x),1]),cellfun(@(x)ones(x,1), num2cell(ceil(10.*rand([7,4]))), 'UniformOutput', false), 'UniformOutput', false)
我需要将单元格的内容向下连接到一个维度,然后对每个连接的向量执行操作,为单元格数组中的每一列生成标量(例如 sum() - 实际操作很复杂、耗时,而且不自然)可矢量化 - 特别是对于不同长度的矢量)。
我可以通过循环轻松地完成此操作(对于我的串联向量和示例),如下所示:
[M N]=size(example_cell_array);
result=zeros(1,N);
cat_cell_array=cell(1,N);
for n=1:N
cat_cell_array{n}=[];
for m=1:M
cat_cell_array{n}=[cat_cell_array{n};example_cell_array{m,n}];
end
end
result=cell2mat(cellfun(@(x)sum(x), cat_cell_array, 'UniformOutput', false))
不幸的是,这太慢了。 (我的元胞数组为 1Mx5,每个元胞中的向量长度范围为 100-200)
是否有一种简单的方法来生成连接元胞数组,其中元胞中包含的向量已按一维连接?
就像是:
dim=1;
cat_cell_array=(?concatcells?(dim,example_cell_array);
编辑:
由于很多人一直在测试解决方案:仅供参考,我应用于每个连接向量的函数是 circ_kappa(x) ,可从循环统计工具箱 http://www.mathworks.com/matlabcentral/fileexchange/10676-circular-statistics-toolbox--directional-statistics-/content/circ_kappa.m