【问题标题】:Repeating elements of one vector according to a second [duplicate]根据第二个向量重复一个向量的元素[重复]
【发布时间】:2016-04-12 14:15:43
【问题描述】:

在 MATLAB 中,如果 N = 2 这是我需要的行:

M = [V(1)*ones(1,L(1)) V(2)*ones(1,L(2))];

如果N = 3,则该行是:

M = [V(1)*ones(1,L(1)) V(2)*ones(1,L(2)) V(3)*ones(1,L(3))];

我怎样才能为任意 N 编写一行产生相同结果的行?

【问题讨论】:

标签: matlab vector rep


【解决方案1】:

从 R2015a 开始,您可以只使用内置的 repelem 函数:

M = repelem(V,L)

或者如果numel(V) 不等于N

M = repelem(V(1:N),L(1:N))

如果您有旧版本的 MATLAB,请考虑一个简单的循环

M = zeros(1, sum(L(1:N)));  %// preallocation
from = 1;
for elem = 1:N
    to = from + L(elem) - 1;
    M(from:to) = v(elem)*ones(1,L(elem));
    from = to + 1;
end

【讨论】:

  • 谢谢,但我使用的是较旧的 MATLAB 版本,即 2012b。
【解决方案2】:

你可以用这个:

M = cell2mat(arrayfun(@(v,len) v*ones(1,len), V, L, 'uni', 0));

示例:

>> V=3:5
V =
     3     4     5
>> L=1:3
L =
     1     2     3
>> M=cell2mat(arrayfun(@(v,len) v*ones(1,len), V, L, 'uni', 0))
M =
     3     4     4     5     5     5

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-08-03
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多