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 

속도는 22 x 22 매트릭스입니다.행렬의 대각선 요소를 파이썬 행의 다른 요소의 합으로 대체하십시오.

환율 행렬의 대각선 요소를 행의 다른 모든 요소의 합으로 바꾸고 싶습니다. 예를 들어

,

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

rates.item (1,1) = 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

관련 문제