如何在matlab中创建一个预分配的数组

时间:2015-04-12 12:02:39

标签: matlab

我正在尝试将这个用于在matlab中分配的循环。我无法将数据从一个数组传输到另一个数组。有人可以帮助制作这个预先分配的数组

myArray = [] 
variableArray= []

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

end

2 个答案:

答案 0 :(得分:1)

正如@Daniel在评论中提到的那样,第二行

variableArray = [variable];

什么都不做,可以转储。

你在for循环中做的是连接10个大小为1x3的向量。因此得到的矢量将是1x30。这可以通过在运行代码后获取大小来验证:

size(myArray)
ans = 
    1 30

要预先分配此向量,您可以创建一个具有以下大小的零向量:

myArray = zeros(1,30);

然后您可以选择以1的步骤从30迭代到3,如@Santhan Salai在回答中所建议的那样,或者从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中的虚数单位,不应用作变量(请参阅{{3}有关细节)。

你实际上也可以转储for循环,并使用this question函数执行此操作,该函数不需要循环,也不需要预分配:

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

将向量[1,2,3]复制10次。

答案 1 :(得分:1)

正如other answer中的 excaza 所指出的那样,这里是带有预分配的修改后的for循环

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

另外,您可以使用 hbaderts 建议的repmat方法{{1}}