【发布时间】:2017-01-18 16:33:54
【问题描述】:
基于包含索引间隔的开始(第一列)和结束(第二列)的几行的矩阵,我想创建一个所有索引的向量。比如A = [2 4; 8 11 ; 12 16],我想要下面的向量index = [2 3 4 8 9 10 11 12 13 14 15 16]。
我正在寻找最快的方法来做到这一点。目前,我发现只有两种可能:
1) 带循环
index = [];
for n = 1:size(A, 1)
index = [index A(n, 1):A(n, 2)];
end
2) 与arrayfun
index = cell2mat(arrayfun(@(n) A(n, 1):A(n, 2), 1:size(A, 1), 'uni', 0));
有趣的是,arrayfun 比循环版本快得多,我不知道为什么。另外,我使用从单元格到垫子的转换,所以这很奇怪。你怎么看?您还有其他建议吗?
感谢您的帮助
【问题讨论】:
-
第一句已被删除!大家好 ;) 对不起,我弄错了,向量索引将等于 [2 3 4 8 9 10 11 12 13 14 15 16]
-
第一句被删除了,因为它在你的问题中构成噪音,称呼是不必要的。您可以(并且应该)使用下面的edit 链接编辑您的问题。
arrayfun只是一个循环的包装器,它更快的唯一原因是您未能在循环版本中进行预分配,因此在每次迭代中都会进行一些(缓慢的)内存分配。 -
@Divakar 您重复的答案似乎没有给出正确的结果
-
@thewaywewalk 啊,谢谢,确实是一个错误!现在应该修好了。
-
欢迎来到 StackOverflow!请考虑通过单击左侧的绿色复选标记来接受其中一个答案,以指示您的问题已解决的系统。谢谢!
标签: matlab loops vectorization