繁体   English   中英

迭代函数输出到矩阵中

[英]Iterative function outputs into matrices

我有一个迭代函数,可以给我两个向量输出。 如何在Matlab中将这些输出存储到两个单独的矩阵中?

[A, B]=iterative_function(x,y)

A和B的大小不变,为1x4。

没有“单元格”,有没有办法做到这一点?

如果我理解正确,则希望将每次迭代输出的所有AB连接起来。 如果它们的大小从未改变,则不需要使用单元格数组,则可以使用常规矩阵。
您的AB是行向量,因此,假设您要将每个结果串联为一行。

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_totalB_total并将每个AB分配给第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个向量。 假设AB不是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列和所有行)。

最后,这两种方法都有效,因为AB具有相同的大小,并且永远不变。 尽管如果由于某种原因导致大小不同,Matlab将不允许您连接这些向量,并且唯一的机会取决于细胞阵列。 正如您所期望的,只有在所有向量都具有相同大小的情况下才能创建矩阵(即,您不能在两行中连接长度为4的数组和长度为5的数组)。 相反,单元格数组是异构数据结构,因此每个单元格都可以包含您喜欢的任何数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM