【发布时间】:2014-10-31 10:01:46
【问题描述】:
我有两个一维 numpy 向量 va 和 vb 通过将所有对组合传递给函数来填充矩阵。
na = len(va)
nb = len(vb)
D = np.zeros((na, nb))
for i in range(na):
for j in range(nb):
D[i, j] = foo(va[i], vb[j])
就目前而言,由于 va 和 vb 相对较大(4626 和 737),这段代码需要很长时间才能运行。但是我希望这可以得到改进,因为使用来自 scipy 的 cdist 方法执行了类似的过程,性能非常好。
D = cdist(va, vb, metric)
我显然知道 scipy 具有在 C 中而不是在 python 中运行这段代码的好处 - 但我希望有一些我不知道的 numpy 函数可以快速执行。
【问题讨论】:
-
使用向量化函数,将使用 Numpy 的
outer函数一次处理 va 和 vb 的所有元素...或传递 va 和 vb 的网格... -
问题是这个函数是自定义的,并且更改为矢量化并非易事。我尝试使用
np.meshgrid,然后使用np.vectorize,但性能提升很小。 -
vectorize不会对您的foo的内部做任何事情。它只是一个包装器,而不是最终用每对标量调用foo(a,b)。这是一种便利,而不是加速工具。
标签: python performance numpy pandas