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)