2012-05-16 19 views
3

我在Matlab一個2歲的列如下所示:增量高達第二值(1:N邏輯)在Matlab的值

   % Col2 Is always greater than Col1 
mat = [2009 2012 ; 
     2012 2012 ; 
     2012 2013 ; 

我需要做的2009:爲ROW1,2012 2012: 2012年第2行,等等......這不是很容易,因爲尺寸1:N保持每對變化。

FinalAns = [ 2009 
       2010 
       2011 
       2012   % -- 
       2012   % -- 
       2012 
       2013  ] ; % -- 

我不能使用「for」循環的數據量是非常大的,我在使用accumarray這並不成功。矢量化的解決方案將受到高度讚賞。

+0

對不起,我不清楚你想要什麼 - 你是什麼意思Col1,Col1 + 1 ...到Col2?那些是矩陣... – Ansari

+0

@Ansari - >我編輯了Q.現在希望它更清楚。 – Maddy

回答

2

這確實你需要:

​​98889
1

這將工作:

Col1 = [ 2009 ; 2012 ; 2012 ] ; 
Col2 = [ 2012 ; 2012 ; 2013 ] ; 

finalAnswer = zeros(sum(Col2 - Col1) + length(Col1),1); 

curr=0; 
for iter = 1:length(Col1) 
    finalAnswer((curr+1):(curr + Col2(iter)-Col1(iter)+1)) = Col1(iter):Col2(iter); 
    curr = curr + Col2(iter)-Col1(iter)+1; 
end 

目前仍然在for循環,而是通過預先分配finalAnswer如上你應該得到的大部分漲幅,你會期待從矢量化解決方案。

2

您可以輕鬆地使用arrayfun產生細胞矩陣如下:

>> Cells = arrayfun(@(a, b) {a:b}, Col1, Col2); 
>> Cells{1} 

ans = 

     2009  2010  2011  2012 

>> Cells{2} 

ans = 

     2012 

>> Cells{3} 

ans = 

     2012  2013 

您可能會發現細胞基質比你原先要求的形式更加方便,但如果不是在這裏是如何將它轉換:

>> horzcat(Cells{:}) 

ans = 

     2009  2010  2011  2012  2012  2012  2013