【发布时间】:2016-10-10 10:35:21
【问题描述】:
我编写了克里金算法,但我发现它很慢。特别是,你知道我如何在下面的 cons 函数中对这段代码进行矢量化:
import time
import numpy as np
B = np.zeros((200, 6))
P = np.zeros((len(B), len(B)))
def cons():
time1=time.time()
for i in range(len(B)):
for j in range(len(B)):
P[i,j] = corr(B[i], B[j])
time2=time.time()
return time2-time1
def corr(x,x_i):
return np.exp(-np.sum(np.abs(np.array(x) - np.array(x_i))))
time_av = 0.
for i in range(30):
time_av+=cons()
print "Average=", time_av/100.
编辑:奖励问题
- 如果我希望
corr(B[i], C[j])的 C 与 B 具有相同的维度,广播解决方案会发生什么 -
如果我的 p-norm 订单是一个数组,scipy 解决方案会发生什么:
p=np.array([1.,2.,1.,2.,1.,2.]) def corr(x, x_i): return np.exp(-np.sum(np.abs(np.array(x) - np.array(x_i))**p))对于 2.,我尝试了
P = np.exp(-cdist(B, C,'minkowski', p)),但 scipy 期待一个标量。
【问题讨论】:
-
@TobySpeight 虽然 CR only 接受工作代码,但我不认为所有性能改进问题都是题外话。 This here says so too.
-
不要添加需要对发布的解决方案进行重大修改的细节。相反,发布一个包含这些新细节的新问题以及是否需要。链接到这个问题。
标签: python numpy vectorization