定义范围内的多个值
问题描述:
答
C = [A(1,1):B(1,1);A(2,1):B(2,1)];
答
试试:
C=[ A(1):1:B(1); A(2):1:B(2) ]
答
您可以组合做到这一点使用arrayfun
与cell2mat
这样的:
A =
1 4 7 10
B =
5 8 11 14
cell2mat(arrayfun(@(n) (A(n):B(n)), 1:numel(A),'UniformOutput', false)')
ans =
1 2 3 4 5
4 5 6 7 8
7 8 9 10 11
10 11 12 13 14
可以缩短下来使用缩写位为UniformOutput
,但我建议写出来,因为缩略语在将来的MATLAB版本中可能不再是明确的。查询this question了解有关该主题的冗长讨论。
+0
+1专门用于缩写的警告 – 2014-09-21 22:19:15
答
您的问题隐含假设B(1)-A(1)
等于B(2)-A(2)
等;否则结果是不确定的。
你可以做到这一点相当普遍和有效的,如下所示:打造第一排,然后用bsxfun
获得所有其他行:
C = bsxfun(@plus, A(1):B(1), A(:)-A(1));
+1
显然是最好的解决方案。我没有进行基准测试(不需要真的),但我认为这比arrayfun方法快了一个数量级。 – 2014-09-23 09:27:54
我要为成千上万的做到这一点。所以这不是有效的方式 – user12331 2014-09-21 19:01:01
那么为什么不扩展你的问题多一点? – Justin 2014-09-21 20:51:49