如何为Numpy数组中除对角元素之外的每个元素添加常量值?

时间:2020-10-13 00:40:01

标签: python numpy

我需要完成下面的函数定义。

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]]

3 个答案:

答案 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)