在MATLAB中反表制函数

时间:2015-12-04 12:14:55

标签: performance matlab

我有一个带有频率的数组freq和另一个带有值的val

val =[1 3 5 7];    
freq=[2 3 3 2];

我想获得数组result

result=[1 1 3 3 3 5 5 5 7 7];

我试图获得result的方法之一是:

freq=[2 3 3 2];
val=[1 3 5 7];
result=[];
for i=1:length(val);
    result=[result repmat(val(i),1,freq(i))];
end

它可以工作,但是对于大型数组,如果我摆脱for - 循环,我期望获得一些性能提升。这有什么内置功能吗?您如何计算大型数组的result

2 个答案:

答案 0 :(得分:5)

这可以这样做:

val = [1 3 5 7]
freq = [2 3 3 2]
res = repelem(val, freq)

res =

 1     1     3     3     3     5     5     5     7     7

答案 1 :(得分:2)

对于大型向量,您可以通过预先分配result并同时更新多个单元格来获得一些性能。

result = zeros(sum(freq), 1);
j = 1;
for i=1:length(freq);
    result(j:j+freq(i)-1) = val(i);
    j = j + freq(i);
end;