如何使用矩阵在每个元素中存储向量

时间:2019-08-08 08:17:07

标签: matlab matrix indexing

我还没有在MATLAB中看到这个。假设我有

V1 = [1 0],  V2 = [0 1]

我想创建一个矩阵,使得矩阵必须是

[[1 0] [0 1]      
 [0 1] [0 2]]

即第一行和第一列为[V1 V2],矩阵的元素(2,2)[0 1]+[0 1]=[0 2]

因此,矩阵的索引(1,1)应该是[1 0],矩阵的索引(1,2)应该是[0 1]

有什么方法可以在MATLAB中实现吗?

1 个答案:

答案 0 :(得分:3)

一个矩阵每个元素只能包含一个值。以下是您如何接近所描述内容的3种选择:

  1. 您可以像这样创建4 * 4矩阵:

    V1 = [1 0]; V2 = [0 1];
    M = [V1, V2; V2, 2*V2];
    

    然后创建一个简写函数以2的块为索引

    Mb = @(r,c) M( r, 2*c-1+[0,1] );
    
    Mb(1,1); % = [1 0]
    Mb(1,2); % = [0 1]
    Mb(2,2); % = [0 2]
    

    请注意,此操作不适用于以2块为单位分配回M的情况,仅用于读取值。


  1. 或者,您可以使用单元格数组

    C = {V1, V2; V2, 2*V2};
    

    现在您可以根据需要对其进行索引,但是它不能像单个矩阵一样工作,也不能对整个单元格数组进行数值运算

    C{2,2}; % = [2, 2], note the curly brace indexing
    

  1. 第三个选择是将矩阵设为3D

    V1 = reshape( V1, 1, 1, [] );
    V2 = reshape( V2, 1, 1, [] );
    M3D = [V1, V2; V2, 2*V2];
    

    现在您可以在第三维中索引

    M3D(2,2,:); % = [0 2], but size [1,1,2]. Could reshape(M3D(2,2,:),1,[]) to get a row.