如何在没有循环的情况下在单元格数组中追加单元格?

时间:2016-12-28 10:00:08

标签: matlab performance cell-array

我有一个数组

A={1 6 31 65; 1 38 53 4};

我想要一个

形式的单元格数组
C={[1 1] [6 6] [31 31] [65 65];[1 1] [38 38] [53 53] [4 4]}; 

这样做的一种方法是循环:

for count=1:2
    for i=1:4
        for j=1:2
            C{i,j}(count)=A(i,j);
        end
    end
end

如何在不循环的情况下完成此操作并提高时间复杂度?

编辑:不是只有count = 2的情况,我的应用程序的计数高达85.循环大大降低了效率。而寻求更高维矩阵的效率也很低。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用cellfun创建每个新元素

C = cellfun(@(x)ones(1,2) * x, A, 'UniformOutput', false);

正如@excaza指出的那样,你有相同大小的数据,所以建议你使用多维数组。你可以(例如),只需沿第三维复制数据

C = repmat(A, [1 1 2]);