我正在尝试编写一个采用函数并设置中心对角线值(即沿 A[0,0]、A[1,1]、....、A[N,N] 的解决方案) 基于对角单元格下方列中的值求和。
一个例子:
A = np.array([[0, 0, 0],
[3, 0, 0],
[4, 2, 0]])
B = function_to_be_built(A)
B = np.array([[7, 0, 0],
[3, 2, 0],
[4, 2, 0]])
您可以在其中看到单元格 [0,0] = 3 + 4 = 7 和单元格 [1,1], 2 = 2 的加法运算符。
当然,这可以使用 for 循环相对容易地实现,但代码被设计为位于中央内核中,因此效率至关重要。我觉得应该有一种方法可以使用 numpy 有效地实现这一点……比如使用 np.tril 所以只选择对角线以下的值?
谁能帮我找到解决方案?
谢谢。
请您参考如下方法:
您可以取 A 的下三角部分,逐列求和,转换为对角矩阵,然后加回 A:
A + np.eye(A.shape[0]) * np.tril(A).sum(axis=0)
