Python numpy:使用不同的值填充偏移对角线

Python numpy:使用不同的值填充偏移对角线,python,numpy,Python,Numpy,我需要制作一个n*n矩阵m,其元素遵循m(I,I+1)=sqrt(I),否则为0。例如,对于n=5,我们应该 [0 a 0 0 0] [0 0 b 0 0] [0 0 0 c 0] [0 0 0 0 d] [0 0 0 0 0] 其中{a,b,c,d}=sqrt({1,2,3,4})。是一个常数三对角矩阵的解,但我的例子要复杂一点。我知道我可以通过循环或列表理解来做到这一点,但还有其他方法吗n可能很大 e、 g.(列表理解代码) 一种方法是创建零数组,然后使用索引选择所需的索引并用平方根值填充

我需要制作一个
n*n
矩阵
m
,其元素遵循
m(I,I+1)=sqrt(I)
,否则为0。例如,对于
n=5
,我们应该

[0 a 0 0 0]
[0 0 b 0 0]
[0 0 0 c 0]
[0 0 0 0 d]
[0 0 0 0 0]
其中
{a,b,c,d}=sqrt({1,2,3,4})
。是一个常数三对角矩阵的解,但我的例子要复杂一点。我知道我可以通过循环或列表理解来做到这一点,但还有其他方法吗<代码>n可能很大

e、 g.(列表理解代码)


一种方法是创建零数组,然后使用索引选择所需的索引并用平方根值填充

例如:

>>> z = np.zeros((5,5))
>>> rng = np.arange(4)
>>> z[rng, rng+1] = np.sqrt(rng+1)
>>> z
array([[ 0.        ,  1.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  1.41421356,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  1.73205081,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  2.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ]])

您可以直接使用
np.diag

>>> d = np.sqrt(1 + np.arange(4))
>>> np.diag(d, 1)
array([[ 0.        ,  1.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  1.41421356,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  1.73205081,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  2.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ]])

np.diag
的第二个参数指定了所讨论的对角线。

显然有点晚了,但我想在这个问题中介绍numpy diagflat方法。可以这样做:

import numpy as np

n = 5

aux = np.arange(1 , n)
aux = np.sqrt(aux)

A = np.diagflat(aux , 1)

第二行应该是
rng=np.arange(4)
import numpy as np

n = 5

aux = np.arange(1 , n)
aux = np.sqrt(aux)

A = np.diagflat(aux , 1)