2015-05-18 36 views
0

假设使用for循环中,我有两个阵列:快速的方式来产生多个序列,而不在Matlab

startIds = [x1, x2, x3] 
endIds = [y1, y2, y3] 

的两个阵列具有相同的长度,并且可以是长的。我们可以假设(endIds(ii)-startIds(ii))对所有职位都是相同的。有没有什么快速的方法来生成多个序列而不使用for循环?

startIds(1):endIds(1) 
startIds(2):endIds(2) 
startIds(3):endIds(3) 

谢谢!

-Thang

回答

2

您可以使用arrayfun

sequences = arrayfun(@(i, j) (i:j), startIds, endIds, 'un', 0); 

你会得到一个单元阵列sequences,其中sequences{k} = startIds(k):endIds(k)

+0

感谢您的回答!对不起,我不清楚我在寻找比使用for循环更快的解决方案。查看我通过Mathworks发现的解决方案! –

1

你也可以尝试有一些有趣的矩阵,

首先获取每个条目和startIds第一之间的差异,

dif = startIds - startIds(1); 
dif_m = repmat(dif,endIds-startIds+1,1); 

然后,让你的第一个序列的矩阵

multi_seq = repmat((startIds(1):endIds(1))',1,length(startIds)); 

获取序列,

multi_seq = multi_seq + dif_m; 
+0

感谢您的回答!正如我对上述答案的评论,我的道歉没有说清楚我正在寻找比使用for循环更快的解决方案。查看我从Mathworks中找到的答案! –