根据第二个重复一个向量的元素
Repeating elements of one vector according to a second
在 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
生成相同的结果?
从 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
你可以使用这个:
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
在 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
生成相同的结果?
从 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
你可以使用这个:
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