MATLAB:快速创建索引向量

时间:2016-04-18 21:53:05

标签: matlab vector vectorization

我有一个变量distr=[0 3 1 0 2];,我有一个变量full,对于所有distr(i),我应该ii

在这个例子中,我想要:

full=[2 2 2 3 5 5];

因为distr(2)=3,因此3x 2,依此类推。

当然,我可以在for - 循环中执行此操作:

full=zeros([1,sum(distr)]);
cc=1;
for i=1:length(distr)
    curr=distr(i);
    full(cc:cc+curr-1)=i*ones([1,curr]);
    cc=cc+curr;
end

但这很慢。你知道一种快速的方法,使用MATLAB的面向阵列的超棒风格吗?谢谢!

1 个答案:

答案 0 :(得分:2)

不确定,但也许这会奏效。我无法检查,因为我目前还没有MATLAB:

full_tmp = arrayfun(@(i,n) i*ones(1,n),1:length(distr),distr,'uniformoutput',false);
full = cat(2,full_tmp{:});