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