【问题标题】:Append a vector by his own multiple times within a loop [duplicate]在循环中多次附加一个向量[重复]
【发布时间】:2018-06-21 20:21:55
【问题描述】:

我认为这应该很容易,但我不知道如何在循环中自己附加一个向量。

例如:

a = [1 2 3]

我想要:

b = [1 2 3 1 2 3 1 2 3]

那么,必须有一个空数组,我通过循环将 a 向量附加 3 次?

【问题讨论】:

  • 附加是not a good idea,如果你打算连续做的话。为什么要循环?使用b=repmat(a,1,3)

标签: matlab loops vector append


【解决方案1】:

要附加两个向量,请使用[a, b] 表示法。 以您为例:

a = [1 2 3];
b = [];
for i=1:3
   b = [b, a]; 
end

编辑回应关于内存分配时间的评论:

考虑在循环之前预分配整个数组。

a = [1 2 3];
b= zeros(1, size(a,2)*3);
s_a = size(a,2);
for i=1:3
   b(((i-1)*s_a + 1):i*s_a) = a; 
end

【讨论】:

  • 虽然这在技术上是正确的,并且正是 OP 所要求的,但就内存和计算时间管理而言,这是一个非常糟糕的主意。
  • 我的假设是,这更多是关于基本语法的问题,而不是最佳内存和计算时间管理。
  • 感谢您的编辑。即使这是一个基本的语法问题,最好不要用坏习惯或习惯来回答,因为人们会习惯以这种方式做事,因为坏习惯已经在他们的系统中根深蒂固,所以会扰乱他们以后的编程生涯。此外,它为我们在 SO 上创造了更多的工作,因为他们只会回来抱怨代码慢。尽管如此,欢迎来到 SO 并继续努力!
【解决方案2】:

答案是使用内置函数repmat

a = [1 2 3]
% Repeat 1x in the rows dimension, 3x in the columns dimension
b = repmat( a, 1, 3 );
% >> b = [1 2 3 1 2 3 1 2 3]

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2018-10-02
    • 2021-06-24
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 2021-03-23
    相关资源
    最近更新 更多