【问题标题】:MATLAB Expanding A Matrix with ZerosMATLAB 用零扩展矩阵
【发布时间】:2012-06-07 20:16:14
【问题描述】:

我需要一个nxn 矩阵,其中第一个pxp 包含1,其余为0。我可以通过遍历细胞来做到这一点,所以我不是在寻求一种方法来做到这一点。我正在寻找“MATLAB 方式”来做到这一点,使用内置函数并避免循环等。

为了更清楚;

n=4 and p=2,

那么预期的结果是:

1 1 0 0
1 1 0 0
0 0 0 0
0 0 0 0

可能有不止一种优雅的解决方案可以做到这一点,所以我会接受最短且最易读的答案。

附:问题标题看起来有点无关紧要:我放这个标题是因为我最初的方法是创建一个带有 1 的 pxp 矩阵,然后将其扩展为带有 0 的 nxn

【问题讨论】:

    标签: matlab matrix vectorization


    【解决方案1】:

    答案是创建一个零矩阵,然后使用索引将其中的一部分设置为1

    例如:

    n = 4;
    p = 2;
    x = zeros(n,n);
    x(1:p,1:p) = 1;
    

    如果你坚持扩大,可以使用:

    padarray( zeros(p,p)+1 , [n-p n-p], 0, 'post')
    

    【讨论】:

    • padarray( ones(p,p) , [n-p n-p], 0, 'post') 也可以用了,感谢教我padarray 功能。
    • 注意:padarray 需要图像处理工具箱。
    【解决方案2】:

    您可以通过水平和垂直连接轻松创建矩阵:

    n = 4;
    p = 2;
    MyMatrix = [ ones(p), zeros(p, n-p); zeros(n-p, n) ];
    

    【讨论】:

      【解决方案3】:

      另一种用zeros扩展矩阵的方法:

      >> p = 2; n = 4;
      >> M = ones(p,p)
      M =
           1     1
           1     1
      >> M(n,n) = 0
      M =
           1     1     0     0
           1     1     0     0
           0     0     0     0
           0     0     0     0
      

      【讨论】:

        【解决方案4】:
        >> p = 2; n = 4;
        >> a = [ones(p, 1); zeros(n - p, 1)]
        
        a =
        
             1
             1
             0
             0
        
        >> A = a * a'
        
        A =
        
             1     1     0     0
             1     1     0     0
             0     0     0     0
             0     0     0     0
        

        【讨论】:

          猜你喜欢
          • 2014-07-19
          • 1970-01-01
          • 1970-01-01
          • 2011-07-07
          • 1970-01-01
          • 1970-01-01
          • 2018-09-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多