我有极地数据帧
data = {
"col1": ["a", "b", "c", "d"],
"col2": [[-0.06066, 0.072485, 0.548874, 0.158507],
[-0.536674, 0.10478, 0.926022, -0.083722],
[-0.21311, -0.030623, 0.300583, 0.261814],
[-0.308025, 0.006694, 0.176335, 0.533835]],
}
df = pl.DataFrame(data)
我想为第col1
列的每个组合计算余弦相似度
所需的输出应如下所示:
┌─────────────────┬──────┬──────┬──────┬──────┐
│ col1_col2 ┆ a ┆ b ┆ c ┆ d │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
╞═════════════════╪══════╪══════╪══════╪══════╡
│ a ┆ 1.0 ┆ 0.86 ┆ 0.83 ┆ 0.54 │
│ b ┆ 0.86 ┆ 1.0 ┆ 0.75 ┆ 0.41 │
│ c ┆ 0.83 ┆ 0.75 ┆ 1.0 ┆ 0.89 │
│ d ┆ 0.54 ┆ 0.41 ┆ 0.89 ┆ 1.0 │
└─────────────────┴──────┴──────┴──────┴──────┘
其中每个值表示各个列值之间的余弦相似度.
我试着用pivot
个方法
df.pivot(values="col2", index="col1", columns="col1", aggregate_function=cosine_similary)
但是,我收到以下错误
'function' object has no attribute '_pyexpr'
我正在使用下面的余弦相似函数
from numpy.linalg import norm
cosine_similarity = lambda a,b: (a @ b.T) / (norm(a)*norm(b))
但是,我可以使用它的任何实现