提高插值计算速度

2024-04-18 23:45:12 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

代码通过应用克里格进行地统计学插值。对于较小的数据量,它工作得很好。然而,当数据较大时,计算时间急剧增加。你知道吗

常数

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)

对于我正在使用的大型matrxsemivariance数组,它运行得非常慢。你知道吗

有没有一个pythonic的方法来帮助提高计算速度,或者我可以重写整个代码块来提高速度?你知道吗


Tags: 数据代码datanp数组predictionc2c1
1条回答
网友
1楼 · 发布于 2024-04-18 23:45:12

你在用MKL library binding来numpy吗?如果没有,你可以试试看它是否会影响代码的性能。你知道吗

同样对于predictionsemivariance列表,您要为这两个列表创建空列表,然后在每次迭代中为它们附加一个值。根据我的理解,代码中的迭代次数是固定的,所以如果从一开始就创建完整大小的列表以避免每次追加都动态创建新列表,那么代码会更快吗?我不知道解释器是否足够聪明,可以检测到列表的大小是固定的,这样就可以创建列表,避免在没有你的帮助下重新分配。你知道吗

相关问题 更多 >