numpy中是否有一个函数来替换numpy数组的下对角线和上对角线值?

use*_*224 4 python arrays numpy

要替换我使用的主对角线np.fill_diagonal:

matrix = np.zeros((4, 4), float)
main = np.array([2,2,2,2])
np.fill_diagonal(matrix, main)
Run Code Online (Sandbox Code Playgroud)

但我还需要更换主对角线旁边的上下对角线:

upper=np.array([1,1,1])
lower=np.array([7,7,7])
Run Code Online (Sandbox Code Playgroud)

要得到:

matrix=[[2 1 0 0]
        [7 2 1 0]
        [0 7 2 1]
        [0 0 7 2]]
Run Code Online (Sandbox Code Playgroud)

谢谢

Fre*_*Foo 9

通过一些智能切片,np.fill_diagonal也可以这样做:

>>> np.fill_diagonal(matrix[:-1, 1:], upper)
>>> np.fill_diagonal(matrix[1:, :-1], lower)
>>> matrix
array([[ 2.,  1.,  0.,  0.],
       [ 7.,  2.,  1.,  0.],
       [ 0.,  7.,  2.,  1.],
       [ 0.,  0.,  7.,  2.]])
Run Code Online (Sandbox Code Playgroud)