问题
代码通过应用克里金法执行地统计插值。对于小数据量,它工作得很好。但是,当数据量很大时,计算时间会急剧增加。
常量
c1, c2, c3, c4
是常量
matrx
是一个大小为6000 x 6000的数据集
变量
data
是一个6000 x 3阵列
gdata
是10000 x 2数组
代码
我遇到问题的代码摘录如下:
prediction = []
for i, dummy_val in range(10000):
semivariance = []
for j in range(len(data[:, 2])):
distance = np.sqrt((gdata[i, 0]-data[j, 0])**2 + (gdata[i, 1]-data[j, 1])**2)
semivariance.append((c1 + c2*(1-np.exp(-(distance/c3)**c4))))
semivariance.append(1)
iweights = np.linalg.lstsq(matrx, semivariance, rcond=None)
weights = iweights[:-3][0][:-1]
prediction.append(np.sum(data[:, 2]*weights))
当我调试代码时,我意识到问题来自
iweights = np.linalg.lstsq(matrx, semivariance, rcond=None)
对于我正在使用的大型matrx
和semivariance
数组运行速度非常慢。
是否有一种pythonic方法可以帮助提高计算速度,或者我可以重写整个代码块来提高速度?