【发布时间】:2016-02-13 07:04:40
【问题描述】:
我有一个迭代函数,它给了我两个向量输出。如何将这些输出存储到 Matlab 中的两个单独的矩阵中?
[A, B]=iterative_function(x,y)
A 和 B 的大小不变,都是 1x4。
有没有办法在没有“细胞”的情况下做到这一点?
【问题讨论】:
标签: matlab loops vector iteration
我有一个迭代函数,它给了我两个向量输出。如何将这些输出存储到 Matlab 中的两个单独的矩阵中?
[A, B]=iterative_function(x,y)
A 和 B 的大小不变,都是 1x4。
有没有办法在没有“细胞”的情况下做到这一点?
【问题讨论】:
标签: matlab loops vector iteration
如果我理解正确,您想连接每次迭代输出的所有A 和B。如果它们的大小永远不会改变,则无需使用元胞数组,您可以使用常规矩阵。
您的 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-th 行:
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 的数组连接成两行)。相反,元胞数组是一种异构数据结构,因此每个元胞都可以包含您喜欢的任何数据。
【讨论】: