【问题标题】:MATLAB: how to pass in the diagonal of a matrix as an argument in another matrix?MATLAB:如何将矩阵的对角线作为另一个矩阵的参数传递?
【发布时间】:2016-07-24 04:03:25
【问题描述】:

c 为二维数组,xy 为长度相同的一维数组(例如,让我们有x=1:7y=3:9)。

我需要找到一种方法来传递来自xy 的参数,如下所述。

如果我简单地说c(x,y),它将给出一个 7 x 7 矩阵。我不想那样。
相反,我想传入[x y] 矩阵的对角线:((x(1), y(1)), (x(2), y(2))...(x(7), y(7))。有没有办法在没有 for 循环或任何迭代语句的情况下做到这一点?

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    你正在寻找sub2ind函数

    res = c( sub2ind(size(c), x, y ) )
    

    【讨论】:

      【解决方案2】:

      有一个更简单的方法。如果您正在寻找对角线,请使用diag。如果你有矩阵c

      c =
      
          5    8    4    2    9    1    6    1    1
          9    8    7    5    9    3    2    7    5
          2    3    9   10    2    1    4    2    2
          3    2    9    2    4    4    7    2    4
          3    9   10    8    7    5    2    1    8
          5    6    3    7    6    1   10    5    2
          6    1    7    3   10    8    2    4    2
      

      您可以使用diag 找到主对角线,无需额外参数:

      >> diag(c)
      ans =
      
         5
         8
         9
         2
         7
         1
         2
      

      不过,第二个参数表明 您想要作为主对角线的偏移量的对角线。所以默认对角线等于0。如果你想要从c(1,3) 开始的对角线,那就是2 在主对角线的上方,所以

      >> diag(c,2)
      ans =
      
         4
         5
         2
         4
         2
         5
         2
      

      同样,如果你想要从c(4,1)开始的对角线,偏移量是-3

      >> diag(c,-3)
      ans =
      
         3
         9
         3
         3
      

      【讨论】:

        猜你喜欢
        • 2018-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多