2015-04-12 69 views
0

我正在嘗試使這個循環預先分配在matlab中。我無法將數據從一個陣列傳輸到另一個陣列。有人可以幫助使這個預分配的數組如何在matlab中進行預分配的數組

myArray = [] 
variableArray= [] 

for i=1:10 
variable = [1,2,3] 
variableArray = [variable] 
myArray = [myArray variableArray] 

end 
+2

你的第二行不做任何事,'variable'和'variableArray'總是相同的。 – Daniel

回答

1

由於@Daniel在評論mentionned,第二行

variableArray = [variable]; 

根本不做任何事,可以傾倒。

你在for循環中所做的是連接10個大小爲1x3的向量。因此得到的載體將是1x30。這可以通過運行代碼後得到的尺寸進行驗證:

size(myArray) 
ans = 
    1 30 

預分配這個載體,可以創建零向量具有這種大小:

myArray = zeros(1,30); 

然後,您可以選擇要麼按照@Santhan Salai的回答,從130到,或者從110,如前所述,並使用邏輯索引將variable寫入正確的位置,就像我在下面的代碼片段中演示的那樣:

myArray = zeros(1,30); 
for k=1:10 
    variable = [1,2,3]; 
    myArray(3*(k-1)+1:3*k) = variable; 
end 

注意,我改變循環變量從ik,如i用作MATLAB虛數單位,並且不應該被用作變量(參見this question細節)。

實際上,你可以轉儲也for循環,並與repmat功能,不需要環和無預分配做到這一點:

myArray = repmat([1,2,3],1,10); 

其複製載體[1,2,3] 10倍。

+2

您的預分配代碼片段沒有預分配,您仍然通過在循環的每次迭代中將'variable'連接到它的末尾來擴大數組的大小。 – excaza

+0

@excaza哦,你當然是對的,我完全忽略了這一點。感謝您的評論! – hbaderts

1

正如指出的excaza作爲other answer評論,下面是修改for循環與預分配

myArray = zeros(1,30); 
for i=1:3:30 
    variable = [1,2,3]; 
    myArray(i:i+2) = variable; 
end 

否則,您可以使用方法與repmathbaderts的建議other answer