我有一个对角线为零的矩阵,最大值为是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
答案 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)