MATLAB: how to pass in the diagonal of a matrix as an argument in another matrix?

后端 未结 2 1434
南笙
南笙 2021-01-14 23:00

Let c be 2D array, and x and y be 1D arrays of the same length (for instance, let\'s have x=1:7 and y=3:9).<

相关标签:
2条回答
  • 2021-01-14 23:32

    You are looking for sub2ind function

    res = c( sub2ind(size(c), x, y ) )
    
    0 讨论(0)
  • 2021-01-14 23:44

    There's an easier way. If you're looking for a diagonal, use diag. If you have a matrix 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
    

    you can find the main diagonal by using diag with no extra arguments:

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

    The second argument, though, indicates which diagonal you want as an offset from the main diagonal. So the default diagonal is equal to 0. If you want the diagonal starting at c(1,3), that's 2 above the main diagonal, so

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

    Similarly, if you want the diagonal starting at c(4,1), the offset is -3:

    >> diag(c,-3)
    ans =
    
       3
       9
       3
       3
    
    0 讨论(0)
提交回复
热议问题