替换 Python 中矩阵的对角线元素

Replacing diagonal elements of matrix in Python

代码计算每行中的个数。然后我希望它用这个计数替换对角线。但是,它只需要最后一次计数。附上当前和所需的输出。

import numpy as np
num_ones=np.zeros(1)
y = np.array([[0, 0, 0], 
             [1, 0, 1],
             [1, 0, 0]])
for x in range(0, 3):
    num_ones = (y[x] == 1).sum()
    print([num_ones])

np.fill_diagonal(y, [-num_ones])
print([y])

当前输出:

[array([[-1,  0,  0],
       [ 1, -1,  1],
       [ 1,  0, -1]])]

期望的输出:

[array([[0,  0,  0],
       [ 1, -2,  1],
       [ 1,  0, -1]])]

不要循环,用向量码求和:

import numpy as np
num_ones=np.zeros(1)
y = np.array([[0, 0, 0], 
              [1, 0, 1],
              [1, 0, 0]])

d = -(y==1).sum(1)
# or, if only 0/1
# d = -y.sum(1)

np.fill_diagonal(y, d)

print(y)

输出:

[[ 0  0  0]
 [ 1 -2  1]
 [ 1  0 -1]]