【问题标题】:Store vectors that result form for loop and then compute the average of all these vectors存储形成 for 循环的向量,然后计算所有这些向量的平均值
【发布时间】:2017-02-17 08:32:52
【问题描述】:

我有一个 4 x 4 矩阵:

A=[rand(1) 2 -1 rand(1);  
   rand(1) 3 rand(1) 0;  
   rand(1) -5 -2 5;  
   9  0   0 rand(1)];

现在我想形成一个向量 b 作为矩阵 A 的第一列。所以向量b

b=[rand(1)  
   rand(1)  
   rand(1)  
   9 ];

我想编写一个 for 循环,计算 b 多次说 100,然后将这些向量存储在矩阵 C(现在的大小为 4*100)中,然后计算 C 的所有列的平均值。到目前为止,我写道:

for j=1:100
   A=[rand(1) 2 -1 rand(1);...
      rand(1) 3 rand(1) 0;...
      rand(1) -5 -2 5;...
      9 0 0 rand(1)];
   b=A(:,1)
end

每次循环执行时,它都会产生一个向量,比如b_1,然后是b_2,....,b_100。如何将它们存储在矩阵 C=[b_1 b_2 ... b_100] 中,然后计算矩阵 C 在所有列上的平均值,以便平均值是大小为 4 x 1 的向量,大小与 b 相同。

【问题讨论】:

  • 尝试使用答案中的代码,让我们知道它是否如您所愿,以便我们可以尝试解决其他问题(如果有)

标签: arrays matlab for-loop matrix indexing


【解决方案1】:

我这台笔记本电脑上没有 Matlab,但小脚本应该是这样的:

for jj=1:100
C(:,jj)=[rand(1) ;...
  rand(1) ;...
  rand(1) ;...
  9 ];
end

矩阵 C 将包含所有列向量 b。要访问其中任何一个,只需使用b(:,x),其中x 是您要使用的索引号或列。 平均而言,您可以执行以下操作:

b_average=[mean(C(1,:)); mean(C(2,:)); mean(C(3,:));mean(C(4,:))];

当然,只有9 值的向量的最后一个平均值没有意义:我保留代码只是为了完整性。 还要记住,如果N 足够大(其中 N 是向量中的样本数),随机数向量的平均值将非常接近零值。

无论如何,for 循环并不是最好的方法。尝试使用这样的东西:

C=[rand(1,100);rand(1,100);rand(1,100);9*ones(1,100)];

或更好(正如 Adriaan 所指出的)

C=[rand(3,100);9*ones(1,100)];

这一行的作用与 for 循环相同。再说一遍:尽量不要在 Matlab 中使用变量 ji,因为它们是保留的。

【讨论】:

  • 谢谢。它真的很好用,而且是一个完整的答案。
  • 我很高兴!如果你喜欢这个答案,如果你觉得它有帮助,你也可以投票!我会非常感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2017-11-09
  • 1970-01-01
  • 2014-05-16
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多