我正在嘗試使這個循環預先分配在matlab中。我無法將數據從一個陣列傳輸到另一個陣列。有人可以幫助使這個預分配的數組如何在matlab中進行預分配的數組
myArray = []
variableArray= []
for i=1:10
variable = [1,2,3]
variableArray = [variable]
myArray = [myArray variableArray]
end
我正在嘗試使這個循環預先分配在matlab中。我無法將數據從一個陣列傳輸到另一個陣列。有人可以幫助使這個預分配的數組如何在matlab中進行預分配的數組
myArray = []
variableArray= []
for i=1:10
variable = [1,2,3]
variableArray = [variable]
myArray = [myArray variableArray]
end
由於@Daniel在評論mentionned,第二行
variableArray = [variable];
根本不做任何事,可以傾倒。
你在for循環中所做的是連接10個大小爲1x3
的向量。因此得到的載體將是1x30
。這可以通過運行代碼後得到的尺寸進行驗證:
size(myArray)
ans =
1 30
預分配這個載體,可以創建零向量具有這種大小:
myArray = zeros(1,30);
然後,您可以選擇要麼按照@Santhan Salai的回答,從1
到30
到,或者從1
到10
,如前所述,並使用邏輯索引將variable
寫入正確的位置,就像我在下面的代碼片段中演示的那樣:
myArray = zeros(1,30);
for k=1:10
variable = [1,2,3];
myArray(3*(k-1)+1:3*k) = variable;
end
注意,我改變循環變量從i
到k
,如i
用作MATLAB虛數單位,並且不應該被用作變量(參見this question細節)。
實際上,你可以轉儲也for循環,並與repmat
功能,不需要環和無預分配做到這一點:
myArray = repmat([1,2,3],1,10);
其複製載體[1,2,3]
10倍。
正如指出的excaza作爲other answer評論,下面是修改for
循環與預分配
myArray = zeros(1,30);
for i=1:3:30
variable = [1,2,3];
myArray(i:i+2) = variable;
end
否則,您可以使用vectorization方法與repmat
由hbaderts的建議在other answer
你的第二行不做任何事,'variable'和'variableArray'總是相同的。 – Daniel