【发布时间】:2015-07-17 03:42:54
【问题描述】:
我有以下优化问题。给定两个 np.arrays X,Y 和一个函数 K 我想尽可能快地计算矩阵关联 gram_matrix,其中 (i,j)-th 元素被计算为 K(X[i],Y[j])。
这里有一个使用嵌套 for 循环的实现,它被认为是解决这类问题最慢的。
def proxy_kernel(X,Y,K):
gram_matrix = np.zeros((X.shape[0], Y.shape[0]))
for i, x in enumerate(X):
for j, y in enumerate(Y):
gram_matrix[i, j] = K(x, y)
return gram_matrix
非常感谢任何帮助。
【问题讨论】:
-
最好在 Code Review 上问这个问题。
-
如果不知道
K是什么,你不会比嵌套循环做得更好。 -
不幸的是 K 作为参数传递。很遗憾,因为这个实现真的很慢,但到目前为止是唯一有效的。
-
这是一个基本的
numpy操作方法问题;它会在这里得到比 Code Review 更多的答案。 -
这已经被问过很多次了。只要
K是一个只接受标量的黑盒,您就无法提高速度。但首先,将典型K的时间与最简单的K的时间进行比较。迭代花费了多少时间,以及评估K无数次的时间?
标签: python numpy scikit-learn vectorization