2016-10-26 2 views
3
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 

Preise ist eine 22 x 22-Matrix.Ersetzen Sie die diagonalen Elemente einer Matrix durch die Summe der anderen Elemente in der Zeile in Python

Ich möchte die diagonalen Elemente der Matrix Raten durch die Summe aller anderen Elemente in der Zeile ersetzen.

Zum Beispiel

rates.item (0,0) = rates.item (0,1) + rates.item (0,2) + rates.item (0,3) + ... .rates.item (0,21)

tarife.item (1,1) = tarife.item (1,0) + tarife.item (1,2) + tarife.item (1,3) +. ... rates.item (1,21)

.....

rates.item (21,21) = rates.item (21,0) + rates.item (21,2) + rates.item (21,3) + .... rates.item (21,20)

Ich habe mich gefragt, wie ich das machen kann. Vielen Dank im Voraus.

Antwort

2

Hier ist ein vektorisiert Ansatz auf einem NumPy Array a als Eingabe -

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]]) 

Lassen Sie uns manuell die Summierungen und Cross-Check gegen die Diagonalelemente berechnen -

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 
+0

Thank you so viel, Divakar. Funktioniert super! – DPdl

+0

@DPdl Gut zu wissen, nett! – Divakar

Verwandte Themen