我想在pysal中创建一个基于距离的空间权重矩阵,稍后将其输入到pysal的"spreg“子模块的空间回归方法中。以下是一个可重现的小代码示例:
import numpy as np
import pysal
position=np.random.standard_normal((1000,2))
y_=np.random.standard_normal((1000,1))
X_=np.random.standard_normal((1000,10))
kd = pysal.lib.cg.KDTree(position)
spweights = pysal.lib.weights.Kernel(kd, bandwidth=None, fixed=False, k=4,
function='triangular', eps=1.000000, ids=None,
diagonal=False, distance_metric='euclidean', radius=None)
models_GM_Error_Het=pysal.model.spreg.GM_Error_Het(y=y_,x=X_,w=spweights,max_iter=2,epsilon=1e-8)python返回的错误是“异常:对角线上的所有条目必须等于0”。另一方面,仅使用仅具有二进制权重的k最近邻权重,
import numpy as np
import pysal
position=np.random.standard_normal((1000,2))
y_=np.random.standard_normal((1000,1))
X_=np.random.standard_normal((1000,10))
kd = pysal.lib.cg.KDTree(position)
spweights2 = pysal.lib.weights.KNN(kd, 4)
models_GM_Error_Het=pysal.model.spreg.GM_Error_Het(y=y_,x=X_,w=spweights2,max_iter=2,epsilon=1e-8)效果很好。如何修改上面的代码?
发布于 2020-01-24 19:20:49
在倒数第二行插入以下内容有帮助:
for k in range(position.shape[0]):
spweights2.weights[k][0]=0.0
spweights2.transform = 'r'对角线元素必须为零。此外,权重必须是行标准化的。程序现在运行得很好。
https://stackoverflow.com/questions/59578118
复制相似问题