2016-10-26 29 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 

レートは22 x 22マトリックスです。行列の対角要素をPythonの行の他の要素の合計で置き換えます。

レート行列の対角要素を、行の他のすべての要素の合計で置き換えたいとします。例えば

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

rates.item(1,0)+ rates.item(1,2)+ rates.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)

私はそれをどうやってできるのだろうと思っていた。ありがとうございます。

答えて

2

ここでnumpyの配列a上のベクトル化されたアプローチは、入力としてです -

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

レッツ・手動対角要素に対する和とクロスチェックを計算 -

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

は、そんなにDivakar、ありがとうございました。よく働く! – DPdl

+0

@DPdl良いことを知って、いいね! – Divakar

関連する問題