numpy ndarrays中匹配行之间的余弦相似度

时间:2018-03-11 08:53:09

标签: python arrays numpy distance cosine-similarity

我有2个(n_samples, n_dimensions)的ndarray,我想要每对相应的行,所以输出将是(n_samples, )

使用sklearn's implementation我得到(n_samples, n_samples)结果 - 这显然会造成很多不相关的计算,这在我的案例中是不可接受的。

使用1 - scipy's implementation是不可能的,因为它需要向量而不是矩阵。

执行我正在寻找的内容的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

假设两个数组select col1, row_number() over (order by col1) as col2 from Hakuna_matata; x具有相同的形状,

  1. 使用yreference
  2. 计算元素点积
  3. np.einsumx
  4. 的每一行计算L2(欧几里得)规范的乘积
  5. 将结果从(1)除以(2)
  6. y

    还有一些要测试的代码;

    def matrix_cosine(x, y):
        return np.einsum('ij,ij->i', x, y) / (
                  np.linalg.norm(x, axis=1) * np.linalg.norm(y, axis=1)
        )