【发布时间】:2018-08-01 02:40:09
【问题描述】:
设X 为Bxn numpy 矩阵,即,
import numpy as np
B = 10
n = 2
X = np.random.random((B, n))
现在,我有兴趣计算所谓的核(甚至相似度)矩阵K,其形状为BxB,其{i,j}-th 元素如下所示:
K(i,j) = fun(x_i, x_j)
其中x_t 表示矩阵X 的第t 行,fun 是x_i、x_j 的某个函数。例如,这个函数可以是所谓的 RBF 函数,即
K(i,j) = exp(-|x_i - x_j|^2)。
为此,一种天真的方法如下:
K = np.zeros((B, B))
for i in range(X.shape[0]):
x_i = X[i, :]
for j in range(X.shape[0]):
x_j = X[j, :]
K[i, j] = np.exp(-np.linalg.norm(x_i - x_j, 2) ** 2)
为了提高效率,我想要以矢量化的方式进行上述操作。你能帮忙吗?
【问题讨论】:
标签: python performance numpy vectorization similarity