【问题标题】:How to use a matrix to store a vector in each element如何使用矩阵在每个元素中存储一个向量
【发布时间】:2019-08-08 08:17:07
【问题描述】:

我没有在 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 中实现吗?

【问题讨论】:

  • 一个矩阵元素只能包含一个值,不能包含两个。
  • 为什么不能只创建一个矩阵 A = [V1 V2;V2 2*V2]
  • @obchardon 是的,我能做到;但是,如果我想找到 A 的 (1,1),它不会告诉我 1 0。Kronecker 乘积也会产生相同的结果。

标签: matlab matrix indexing


【解决方案1】:

矩阵的每个元素只能包含一个值。以下 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.
    

【讨论】:

  • 差不多了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多