【问题标题】:Stack copies of elements of a vector [duplicate]堆栈向量元素的副本[重复]
【发布时间】:2017-06-16 10:17:26
【问题描述】:

我有一个包含 N=1263 条目的向量:

temp=[14, 0.5, ..., 12]

我想创建一个向量,它重复条目 1,即 14,42 次,然后是条目 2,即 0.5,重复 42 次,类似地贯穿整个向量。它应该产生一个大小为 53046x1 的向量。

以下代码适用于一个简单的案例:

F = [1 4 9];
R = [repmat(F(1),[3,1]); repmat(F(2),[3,1]); repmat(F(3),[3,1])]    
R = [1 1 1 4 4 4 9 9 9]

但是当N 变大时会很麻烦。有没有更快的方法解决这个问题?

【问题讨论】:

  • 试试这个方法:R = repmat(F(:)', 3, 1); R = R(:);

标签: arrays matlab vector


【解决方案1】:

这正是repelem(在 R2015a 中引入)的用途。对于您的实际问题,您可以使用:

R = repelem(temp.',42);  %This will repeat each entry of 'temp' 42 times

对于给定的示例,

F = [1 4 9];
R = repelem(F.',3);      %This will repeat each entry of 'F' 3 times

你也可以这样做:

R = ones(42,1)*temp;
R = R(:);

【讨论】:

  • 另外(对于没有repelem的Matlab版本):F = [1 4 9]; n = 3; R = F(ceil(1/n:1/n:end))
【解决方案2】:

这是一种不寻常的方法,但它确实有效

https://www.mathworks.com/help/matlab/ref/kron.html

您需要做的就是包含您的矩阵以及重复长度的一个矩阵。

R = kron(F(:),ones(42,1));

【讨论】:

    【解决方案3】:
    R = reshape(repmat(F, 42, 1), [], 1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2021-01-06
      • 2014-11-21
      • 2010-10-28
      • 1970-01-01
      相关资源
      最近更新 更多