从2个不同的m×by-n矩阵迭代地提取列,并在一组n个不同的m-by-2矩阵中连接

时间:2014-12-09 17:30:29

标签: arrays matlab loops memory matrix

MATLAB:

在MATLAB中,

我有 2 m-by-n 矩阵,A和B.我想制作一组 n

m-by-2 矩阵,例如 ith 矩阵( n 的集合),第一列将是 ith

来自A和第二列的

列将是来自B的 ith 列。

如何从两个矩阵中提取和连接 ith 列?

如何存储这些 n 矩阵?使用循环? (存储器?)

示例:

输入:

A = [1,2,3; 4,5,6; 7,8,9](3x3矩阵)

B = [11,22,33; 44,55,66; 77,88,99](3x3矩阵)

输出:

对于i = 1:3

C1 = [1,11; 4,44; 7,77]

C2 = [2,22; 5,55; 8,88]

C3 = [3,33; 6,66; 9,99]

1 个答案:

答案 0 :(得分:1)

我要做的第一件事是更改变量名称。主要是为了使变量更容易引用,特别是当 m n 更改时。而不是写

C1(:,:)
C2(:,:)
...
Cn(:,:)

我要写

C(:,:,1)
C(:,:,2)
...
C(:,:,n)

我所做的就是将索引从变量名移动到第三维的索引。

现在,要创建C数组:

A = [ 1, 2, 3; 4, 5 ,6; 7, 8, 9]
B = [ 11, 22, 33; 44, 55 ,66; 77, 88, 99]

[m,n]=size(A)

C = reshape([A',B']', m, 2, n)

这个输出是:

A =

   1   2   3
   4   5   6
   7   8   9

B =

   11   22   33
   44   55   66
   77   88   99

m =  3
n =  3
C =

ans(:,:,1) =

    1   11
    4   44
    7   77

ans(:,:,2) =

    2   22
    5   55
    8   88

ans(:,:,3) =

    3   33
    6   66
    9   99

如您所见,C(:,:,1)等于示例中的C1 C(:,:,2) = C2,依此类推。随着AB的大小发生变化,这种情况不会发生变化。你永远不必想出新的变量名。所有你需要做的就是知道你有多少 m-by-2 矩阵

numVars = size(C,3);

注意:这使用了与答案相同的技术:matlab - how to merge/interlace 2 matrices?