我正在尝试将这个用于在matlab中分配的循环。我无法将数据从一个数组传输到另一个数组。有人可以帮助制作这个预先分配的数组
myArray = []
variableArray= []
for i=1:10
variable = [1,2,3]
variableArray = [variable]
myArray = [myArray variableArray]
end
答案 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
另外,您可以使用vectorization 中 hbaderts 建议的repmat
方法{{1}}