我有一个变量distr=[0 3 1 0 2];
,我有一个变量full
,对于所有distr(i)
,我应该i
次i
。
在这个例子中,我想要:
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的面向阵列的超棒风格吗?谢谢!
答案 0 :(得分:2)
不确定,但也许这会奏效。我无法检查,因为我目前还没有MATLAB:
full_tmp = arrayfun(@(i,n) i*ones(1,n),1:length(distr),distr,'uniformoutput',false);
full = cat(2,full_tmp{:});