Fill matrix diagonal with different values for each python numpy

后端 未结 2 1686
南旧
南旧 2021-01-12 19:48

I saw a function numpy.fill_diagonal which assigns same value for diagonal elements. But I want to assign different random values for each diagonal elements. Ho

2条回答
  •  醉酒成梦
    2021-01-12 20:39

    You can use np.diag_indices to get those indices and then simply index into the array with those and assign values.

    Here's a sample run to illustrate it -

    In [86]: arr          # Input array
    Out[86]: 
    array([[13, 69, 35, 98, 16],
           [93, 42, 72, 51, 65],
           [51, 33, 96, 43, 53],
           [15, 26, 16, 17, 52],
           [31, 54, 29, 95, 80]])
    
    # Get row, col indices
    In [87]: row,col = np.diag_indices(arr.shape[0])
    
    # Assign values, let's say from an array to illustrate
    In [88]: arr[row,col] = np.array([100,200,300,400,500])
    
    In [89]: arr
    Out[89]: 
    array([[100,  69,  35,  98,  16],
           [ 93, 200,  72,  51,  65],
           [ 51,  33, 300,  43,  53],
           [ 15,  26,  16, 400,  52],
           [ 31,  54,  29,  95, 500]])
    

    You can also use np.diag_indices_from and probably would be more idomatic, like so -

    row, col = np.diag_indices_from(arr)
    

    Note : The tried function would work just fine. This is discussed in a previous Q&A - Numpy modify ndarray diagonal too.

提交回复
热议问题