定义范围内的多个值

问题描述:

我有两个数组定义范围内的多个值

A=[1;2] 

B= [5;6] 

现在我想有矩阵C = A:B,使得

C = [1 2 3 4 5; 2 3 4 5 6] 

我如何在MATLAB做到这一点?

C = [A(1,1):B(1,1);A(2,1):B(2,1)]; 
+0

我要为成千上万的做到这一点。所以这不是有效的方式 – user12331 2014-09-21 19:01:01

+0

那么为什么不扩展你的问题多一点? – Justin 2014-09-21 20:51:49

试试:

C=[ A(1):1:B(1); A(2):1:B(2) ] 

您可以组合做到这一点使用arrayfuncell2mat这样的:

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