How to assign values to a MATLAB matrix on the diagonal?

后端 未结 7 1675
名媛妹妹
名媛妹妹 2020-11-27 03:45

Suppose I have an NxN matrix A, an index vector V consisting of a subset of the numbers 1:N, and a value K, and I want to do this:

 for i = V
     A(i,i) = K         


        
7条回答
  •  [愿得一人]
    2020-11-27 03:58

    I usually use EYE for that:

    A = magic(4)
    A(logical(eye(size(A)))) = 99
    
    A =
        99     2     3    13
         5    99    10     8
         9     7    99    12
         4    14    15    99
    

    Alternatively, you can just create the list of linear indices, since from one diagonal element to the next, it takes nRows+1 steps:

    [nRows,nCols] = size(A);
    A(1:(nRows+1):nRows*nCols) = 101
    A =
       101     2     3    13
         5   101    10     8
         9     7   101    12
         4    14    15   101
    

    If you only want to access a subset of diagonal elements, you need to create a list of diagonal indices:

    subsetIdx = [1 3];
    diagonalIdx = (subsetIdx-1) * (nRows + 1) + 1;
    A(diagonalIdx) = 203
    A =
       203     2     3    13
         5   101    10     8
         9     7   203    12
         4    14    15   101
    

    Alternatively, you can create a logical index array using diag (works only for square arrays)

    diagonalIdx = false(nRows,1);
    diagonalIdx(subsetIdx) = true;
    A(diag(diagonalIdx)) = -1
    A =
        -1     2     3    13
         5   101    10     8
         9     7    -1    12
         4    14    15   101
    

提交回复
热议问题