MATLAB indexing question

前端 未结 4 2036
我在风中等你
我在风中等你 2020-12-07 01:34

I have a matrix, for example

A = [ 1 2 3; 4 5 6; 7 8 9] ;

and a vector of size 1x3 which specifies which element in each row is the one I\

相关标签:
4条回答
  • 2020-12-07 01:50

    First of all, the indexes in Matlab go from top to bottom.
    So in your case A[1] = 1 , A[2] = 4 , A[3] = 7

    That said, it would be easier to work on A' , because its a bit more trivial.

    B = A';
    
    B((vector + [0:2].* 3))
    
    0 讨论(0)
  • 2020-12-07 01:54

    It's a bit ugly, but diag(A(1:3,[1 2 1])) will do the trick.

    0 讨论(0)
  • 2020-12-07 02:03

    MATLAB provides the SUB2IND function to convert rows/columns subscripts to linear indices:

    >> A = [1 2 3; 4 5 6; 7 8 9];
    >> idx = sub2ind(size(A),1:3,[1 2 1]);  %# rows: [1 2 3], cols: [1 2 1]
    >> A(idx)
         1     5     7
    
    0 讨论(0)
  • 2020-12-07 02:13

    Here's a variation of Yochai's answer but without the transpose (this is also basically what SUB2IND does in Amro's answer):

     output = A((1:3)+3.*(vector-1));
    

    Or for an array A of an arbitrary size:

     nRows = size(A,1);
     output = A((1:nRows)+nRows.*(vector-1));
    
    0 讨论(0)
提交回复
热议问题