定义多个值的范围

时间:2014-09-21 18:51:45

标签: matlab

我有两个数组

A=[1;2]

B= [5;6]

现在我希望矩阵C = A:B这样

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

我怎样才能在matlab中做到这一点?

4 个答案:

答案 0 :(得分:1)

您可以使用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,以便对该主题进行冗长的讨论。

答案 1 :(得分:1)

您的问题隐含地假定B(1)-A(1)等于B(2)-A(2)等;否则结果是不确定的。

您可以按照以下方式非常有效地执行此操作:构建第一行,然后使用bsxfun获取所有其他行:

C = bsxfun(@plus, A(1):B(1), A(:)-A(1));

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试一试:

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