【发布时间】:2014-03-03 11:49:08
【问题描述】:
在我尝试对周期性边界条件的二维数组的方差-协方差矩阵执行 cholesky 分解时,在某些参数组合下,我总是得到LinAlgError: Matrix is not positive definite - Cholesky decomposition cannot be computed。不确定是numpy.linalg 还是实现问题,因为脚本很简单:
sigma = 3.
U = 4
def FromListToGrid(l_):
i = np.floor(l_/U)
j = l_ - i*U
return np.array((i,j))
Ulist = range(U**2)
Cov = []
for l in Ulist:
di = np.array([np.abs(FromListToGrid(l)[0]-FromListToGrid(i)[0]) for i, x in enumerate(Ulist)])
di = np.minimum(di, U-di)
dj = np.array([np.abs(FromListToGrid(l)[1]-FromListToGrid(i)[1]) for i, x in enumerate(Ulist)])
dj = np.minimum(dj, U-dj)
d = np.sqrt(di**2+dj**2)
Cov.append(np.exp(-d/sigma))
Cov = np.vstack(Cov)
W = np.linalg.cholesky(Cov)
尝试移除潜在奇点也未能解决问题。非常感谢任何帮助。
【问题讨论】:
-
你做了什么来消除奇点?像 Cov = Cov + numpy.diag(numpy.repeat(delta, k)) 这样的东西有用吗? (基本上是给Cov加了一个小的对角矩阵。这里delta是一个小浮点数,k是Cov的维度)
-
我只是有 Cov = Cov + d*np.identity(k)。但是查看原始矩阵,似乎没有任何值接近于零..
标签: python numpy scipy linear-algebra covariance