我有一个迭代函数,它给我两个矢量输出。如何在Matlab中将这些输出存储到两个单独的矩阵中?
[A, B]=iterative_function(x,y)
A和B的大小不变,它们是1x4。
有没有办法在没有'细胞'的情况下做到这一点?
答案 0 :(得分:2)
如果我理解正确,您希望连接在每次迭代时输出的所有A
和B
&#s。如果它们的大小永远不会改变,则不需要使用单元阵列,您可以使用常规矩阵
您的A
和B
是行向量,因此我们假设您希望将每个结果连接为一行。
A_total=[];
B_total=[];
while(your loop is going)
[A, B]=iterative_function(x,y)
A_total=[A_total ; A];
B_total=[B_total ; B];
end
如果您事先知道循环将完成多少次迭代,您也可以预先分配此类矩阵A_total
和B_total
,并将每个A
和B
分配给第i
行:
A_total=zeros(MaxIteration,4); %because A has length 4
B_total=zeros(MaxIteration,4); %because B has also length 4
for i=1:MaxIterations
[A, B]=iterative_function(x,y)
A_total(i,:)=A;
B_total(i,:)=B;
end
更新:正如@Max正确指出的那样,我认为你也可以做同样的事情(即在矩阵中连接几个大小相等的向量),即使你的向量是不是行向量而是列向量。主要技巧是,现在你不分配1行= 1向量,但是1列= 1向量。我们假设A
和B
不是1x4,而是4x1。这种连接可以很容易地完成如下(在循环内):
A_total=[A_total , A]; % a space without a comma works just as well
B_total=[B_total , B];
或者,如果您事先了解迭代次数,则可以通过以下方式预先分配:
A_total=zeros(4,MaxIteration); %because A has length 4
B_total=zeros(4,MaxIteration); %because B has also length 4
这次你的列数与迭代次数一样多,而在前一种情况下,你的行数和迭代次数一样多。 在循环内部,您可以用这种方式替换第i列:
A_total(:,i)=A;
B_total(:,i)=B;
其中(我的错误,我之前没有解释)冒号操作符(:
)表示"所有这些" (即表达式A_total(:,i)
表示第i列和所有行)。
最后,这两种方法都有效,因为A
和B
具有相同的大小,并且它永远不会改变。虽然由于任何原因,如果这些大小变得不同,Matlab将不允许您连接这些向量,并且您唯一的机会依赖于单元格数组。正如您所期望的那样,只有在所有向量具有相同大小的情况下才能创建矩阵(即,您不能连接长度为4的数组和两行中长度为5的数组)。相反,单元阵列是异构数据结构,因此每个单元可以包含您喜欢的任何数据。