【发布时间】:2018-10-21 23:46:58
【问题描述】:
问题
代码通过应用克里金法执行地统计插值。对于小数据量,它工作得很好。但是,当数据量很大时,计算时间会急剧增加。
常量
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 数组,它的运行速度非常慢。
有没有一种 Python 方法可以帮助提高计算速度,或者我可以重写整个代码块来提高速度?
【问题讨论】:
-
这看起来像 stackoverflow.com/questions/50288513/… 的副本
-
@WarrenWeckesser 有些事情看起来很相似(比如变量名)。然而,这个问题的上下文是不同的,因为克里金法暗示了相关重复预测的可能性,一个导致不同可能性的上下文(例如,梯度下降的热启动)。
-
@AmiTavory,给定变量名称,两者看起来都像是关于克里金的问题。
-
如果
matrx对所有i确实相同,您可以例如在循环外计算它的 QR 分解,然后用它更快地解决最小二乘问题。
标签: python performance pandas numpy scipy