2016-12-28 63 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

相關問題