使用 numpy/scipy 的托普利茨矩阵
Toeplitz matrix using numpy/scipy
在 Octave 或 Matlab 中,有一种简洁、紧凑的方法来创建大型 Toeplitz 矩阵,例如:
T = toeplitz([1,-0.25,zeros(1,20)])
这样可以节省大量时间,否则将花费大量时间使用额外的代码行用数十个或数百个零填充矩阵。
然而,我似乎无法对 scipy 或 numpy 执行相同的操作,尽管这两个库都具有 toeplitz() 和 zeros() 函数。
有没有类似的方法可以做到这一点,还是我必须自己制定一个例程来做到这一点(不是一个大问题,但仍然很麻烦)?
谢谢,
F.
目前我认为你能做的最好的是:
from numpy import concatenate, zeros
from scipy.linalg import toeplitz
toeplitz(concatenate([[1., -.25], zeros(20)]))
从 python 3.5 开始,我们将有:
toeplitz([1., -.25, *zeros(20)])
所以这值得期待。
另一种选择是使用 r_:
import numpy as np
from scipy.linalg import toeplitz
toeplitz(np.r_[1, -0.25, np.zeros(20)])
您还可以使用列表:
toeplitz([1, -0.25] + [0]*20)
在 Octave 或 Matlab 中,有一种简洁、紧凑的方法来创建大型 Toeplitz 矩阵,例如:
T = toeplitz([1,-0.25,zeros(1,20)])
这样可以节省大量时间,否则将花费大量时间使用额外的代码行用数十个或数百个零填充矩阵。
然而,我似乎无法对 scipy 或 numpy 执行相同的操作,尽管这两个库都具有 toeplitz() 和 zeros() 函数。 有没有类似的方法可以做到这一点,还是我必须自己制定一个例程来做到这一点(不是一个大问题,但仍然很麻烦)?
谢谢,
F.
目前我认为你能做的最好的是:
from numpy import concatenate, zeros
from scipy.linalg import toeplitz
toeplitz(concatenate([[1., -.25], zeros(20)]))
从 python 3.5 开始,我们将有:
toeplitz([1., -.25, *zeros(20)])
所以这值得期待。
另一种选择是使用 r_:
import numpy as np
from scipy.linalg import toeplitz
toeplitz(np.r_[1, -0.25, np.zeros(20)])
您还可以使用列表:
toeplitz([1, -0.25] + [0]*20)