2016-12-28 74 views
1

我有一个数组如何在没有循环的单元格数组中追加单元格?

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 

我怎样才能做到这一点没有循环,并提高时间复杂性?

编辑:这是不是只是算= 2的情况下,我已经应用程序,其中计数变为高达85循环大大降低了工作效率。而去维数更高的矩阵也是低效的。要做到这一点

+0

你不知道。为什么你需要一个单元阵列?单元格包含所有大小相同的数组。 – excaza

回答

0

一种方法是使用cellfun创建的每个新元素

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

由于@excaza指出,虽然,你因此建议您使用多有大小相等的数据二维数组。你可以(例如),只是复制沿第三维的数据而不是

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

注意'cellfun'可能会比在情况下,显式循环,其中[字符函数输入]不支持(https://www.mathworks.com/help/matlab/ref/cellfun.html#inputarg_func)慢。 – excaza

+0

@excaza在这种情况下尽管它可能是因为在讨论的示例更快有各单元阵列元件的没有预分配。 – Suever