在Python中,将矩阵的对角元素替换为行中其他元素的总和

在Python中,将矩阵的对角元素替换为行中其他元素的总和,python,numpy,matrix,diagonal,Python,Numpy,Matrix,Diagonal,费率为22 x 22矩阵 我想用行中所有其他元素的总和替换费率矩阵的对角线元素 比如说, 费率。项目(0,0)=费率。项目(0,1)+费率。项目(0,2)+费率。项目(0,3)+…费率。项目(0,21) 费率。项目(1,1)=费率。项目(1,0)+费率。项目(1,2)+费率。项目(1,3)+…费率。项目(1,21) 费率。项目(21,21)=费率。项目(21,0)+费率。项目(21,2)+费率。项目(21,3)+…费率。项目(21,20) 我想知道我怎么能做到。提前非常感谢。这里有一个矢量化的

费率为22 x 22矩阵

我想用行中所有其他元素的总和替换费率矩阵的对角线元素

比如说,

费率。项目(0,0)=费率。项目(0,1)+费率。项目(0,2)+费率。项目(0,3)+…费率。项目(0,21)

费率。项目(1,1)=费率。项目(1,0)+费率。项目(1,2)+费率。项目(1,3)+…费率。项目(1,21)

费率。项目(21,21)=费率。项目(21,0)+费率。项目(21,2)+费率。项目(21,3)+…费率。项目(21,20)


我想知道我怎么能做到。提前非常感谢。

这里有一个矢量化的方法,它使用NumPy数组
a
作为输入-

import pandas as pd
import numpy as np
rates=(pd.read_excel("C:\Anaconda3\RateMatrix.xlsx", sheetname="Pu239Test", skiprows=0)).as_matrix() #read the matrix values from excel spreadsheet, and converts the values to a matrix
让我们手动计算总和,并对对角线元素进行交叉检查-

In [171]: a        # Input array
Out[171]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

# Get row and column indices of diag elements    
In [172]: row,col = np.diag_indices_from(a)

# Assign the sum of each row except the diag elems into diag positions
In [173]: a[row,col] = a.sum(axis=1) - a[row,col]

# Updated array
In [174]: a
Out[174]: 
array([[10,  1,  2,  3,  4],
       [ 5, 29,  7,  8,  9],
       [10, 11, 48, 13, 14],
       [15, 16, 17, 67, 19],
       [20, 21, 22, 23, 86]])

非常感谢你,迪瓦卡。很好@DPdl很高兴知道,很好!
In [175]: a[0,1] + a[0,2] + a[0,3] + a[0,4]
Out[175]: 10

In [176]: a[1,0] + a[1,2] + a[1,3] + a[1,4]
Out[176]: 29

In [177]: a[2,0] + a[2,1] + a[2,3] + a[2,4]
Out[177]: 48

In [178]: a[3,0] + a[3,1] + a[3,2] + a[3,4]
Out[178]: 67

In [179]: a[4,0] + a[4,1] + a[4,2] + a[4,3]
Out[179]: 86