将最高值更改为最低值python

时间:2019-01-12 21:53:56

标签: python pandas numpy

我有一个对角线为零的矩阵,最大值为是20,最低的是1,我现在想将20更改为1,将19更改为2,反之亦然,将1更改为20,2更改为19。对角线仍应保持为零或取无穷大值。 目前,我只知道如何扩展它们,但还不知道。如果该问题重复,请直接告诉我,我找不到答案。

matrix=pd.DataFrame(np.random.randint(0,20,size=(4, 4)), 
columns=list('ABCD'))
matrix.values[[np.arange(len(matrix))]*2]=0
#this is just scaling down, which Idont want
revisedmatrix=(1./(matrix+1))
revised.values[[np.arange(len(revised))]*2]=0

1 个答案:

答案 0 :(得分:1)

matrix中减去最大值:

matrix = matrix.values.max() + 1 - matrix

现在,用零填充对角线:

matrix.values[(np.arange(len(matrix)),) * 2] = 0

或者按照@AChampion在评论中的建议使用np.fill_diagonal

np.fill_diagonal(matrix.values, 0)