我需要完成下面的函数定义。
def add_val_to_non_diag(A, val):
pass
这就是我想要发生的事情:
A = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
add_val_to_non_diag(A, 1)
输出
[[1, 3, 4],
[5, 5, 7],
[8, 9, 9]]
答案 0 :(得分:4)
您可以将值添加到每个元素,然后从对角线中减去。
import numpy as np
def add_val_to_non_diag(A, v):
return A + v * (1 - np.eye(A.shape[0]))
A = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
add_val_to_non_diag(A, 1)
=> array([[1., 3., 4.],
[5., 5., 7.],
[8., 9., 9.]])
答案 1 :(得分:1)
这不是真正的技巧,而不是简单的技巧(适用np.eye
的技巧):
import numpy as np
A = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
def add_val_to_non_diag(A, v):
x, y = np.indices(A.shape)
return A + v*(x!=y)
答案 2 :(得分:0)
Numpy已经内置了该功能。 使用下面的代码示例:
#To fill the diagonal
np.fill_diagonal(A, 100)
#then to add to the diagonal use the code below
np.fill_diagonal(A, A.diagonal() + 100)