【问题标题】:Vector similarity with multiple dtypes (string, int, floats etc.)?与多种数据类型(字符串、整数、浮点数等)的向量相似度?
【发布时间】:2021-10-14 12:00:18
【问题描述】:

我的数据框中有以下 2 行:

[1, 1.1, -19, "kuku", "lulu"]
[2.8, 1.1, -20, "kuku", "lilu"]

我想通过比较每个维度(等于?1,否则为 0)来计算它们的相似性,并得到以下向量:[0, 1, 0, 1, 0],是否有任何函数采用向量并对所有行执行这种“相似性”并计算意思是?在我们的例子中是2/5 = 0.4

【问题讨论】:

  • 如果您想要 Pandas 解决方案,您可能应该至少为输入和输出提供一个最小的可重现示例。
  • 类似df.corr()?

标签: python-3.x similarity


【解决方案1】:

我只会在 NumPy 数组上使用一个简单的=,将向量转换为int,将向量的平均值转换为numpy.mean()

import numpy as np


a = [1, 1.1, -19, "kuku", "lulu"] 
b = [2.8, 1.1, -20, "kuku", "lilu"]


res = (np.array(a) == np.array(b)).astype(int)
print(res)                                                                                                                                             
# [0 1 0 1 0]
v = res.mean()
print(v)
# 0.4

如果您不介意将所有内容计算两次,并且您可以负担得起潜在的大型中间临时对象:

import numpy as np


arr = np.array([
    [1, 1.1, -19, "kuku", "lulu"],
    [2.8, 1.1, -20, "kuku", "lilu"],
    [2.8, 1.1, -20, "kuku", "lulu"]])


corr = arr[None, :, :] == arr[:, None, :]
score = corr.mean(-1)
print(score)
# [[1.  0.4 0.6]
#  [0.4 1.  0.8]
#  [0.6 0.8 1. ]]

【讨论】:

  • 我使用了与您完全相同的方法,但我认为 pandas / sklearn 中有一个功能,就像我们用于余弦相似度一样。
  • @SteveS 你可以用 Pandas 模仿上面的内容(也许更有效),但你应该提供更多关于你拥有/想要的输入/输出的细节。
  • 我有一个向量和数据框(相同的列),我想计算向量与数据框中每一行(向量)的相似度,就像我用余弦一样。
猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2021-06-26
  • 2019-11-29
  • 2016-09-05
  • 2011-03-10
相关资源
最近更新 更多