python - 使用 pandas 如何迭代 2 个备用向量行,使用 scipy 计算并保存到新列
问题描述
祝大家平安度过圣诞快乐;
我在 pandas DataFrame 上有嵌入句子的稀疏向量,如下所示;
title_emb text_emb
[[2, 6294, 4076, 346, 10231, 16068, 8654, 1191... [[2, 11830, 18726, 16331, 4474, 4083, 2654, 41...
[[2, 6451, 6230, 2513, 107, 12202, 6538, 4176,... [[2, 10082, 29402, 4039, 21982, 23, 4029, 6766...
...
[[2, 8403, 8569, 4234, 6706, 4482, 23033, 4136... [[2, 8569, 4234, 6706, 4482, 145, 23033, 4136,...
175846 rows × 2 columns
我想使用 scipy.spatial.distance.cdist 库添加不同类型的相似性,并遇到我给定数据不是二维数组的错误。
查看 scipy doc, cdist(XA,XB,'similarity_name') 其中 XA 和 XB 是 2-dim 稀疏向量
train['euclidean'] = cdist(train['title_emb'],train['text_emb'], 'euclidean')
train['cosine'] = cdist(train['title_emb'],train['text_emb'], 'cosine')
train['hamming'] = cdist(train['title_emb'],train['text_emb'], 'hamming')
train['jaccard'] = cdist(train['title_emb'],train['text_emb'], 'jaccard')
这给出了错误,但下面没有
print(cdist(train['title_emb'][175846],train['text_emb'][175846], 'euclidean'))
print(cdist(train['title_emb'][175846],train['text_emb'][175846], 'cosine'))
print(cdist(train['title_emb'][175846],train['text_emb'][175846], 'jaccard'))
哪个应该是计算并将其保存到 DataFrame 的最快方法?
- 使用for循环,保存到列表并放入DataFrame
- 使用 df.iterrow,保存到列表并将其放入 DataFrame
- 有没有办法修复上面的代码并将其直接保存到DataFrame?
- 其他方式,如 df.apply( function )
解决方案
推荐阅读
- apache-spark - 使用 spark session 从 spark 访问 Hive 视图
- laravel - 在 nginx 中部署 Laravel 作为 apache 的反向代理
- javascript - 我想使用 tasks.length 为我的任务设置计数
- awk - 如何使用 awk 过滤字段遵循模式
- python - Python Multiprocessing:如何从具有列表下一个元素的一组进程中再次运行一个进程?
- go - 试图用 golang 库编组一个 EnrichedActivity
- python - Python (TensorFlow) - 连接不同维度的张量对象
- rest - etags 和普通浏览器提供的缓存有什么区别?
- swift - `@Published var name: ClassType` 在 SwiftUI / 手动触发之外_不起作用?
- reactjs - TypeError:未定义不是对象(评估'route.params')