2016-04-18 154 views
1

的矢量我有一個變量distr=[0 3 1 0 2];,我有一個變量full應該contrain distr(i)i,所有iMATLAB:快速創建索引

在這個例子中,我想:

full=[2 2 2 3 5 5]; 

因爲distr(2)=3,因此3X 2,等等。

當然,我可以做一個for -loop:

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

你想__run長度解碼___。使用'repelem'如下:'result = repelem(1:numel(distr),distr);'。或者查看其他方法的鏈接問題和答案。 –

+0

啊,那是正確的名字,我無法找到結果,因爲我不知道如何調用這個屬性。謝謝,這有助於 - 特別是那裏的性能測試! – NicoDean

回答

2

不知道,但也許這會工作。我不能檢查它,因爲我目前沒有MATLAB:

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

哦,是的,它:)謝謝你! – NicoDean