【发布时间】:2023-04-10 23:18:01
【问题描述】:
鉴于DataFrame:
id articleno target
0 1 [607303] 607295
1 1 [607295] 607303
2 2 [243404, 617953] 590448
3 2 [590448, 617953] 243404
对于每一行,通过查找字典列表中的每个项目来计算平均文章嵌入:
embeddings = {"607303": np.array([0.19, 0.25, 0.45])
,"607295": np.array([0.77, 0.76, 0.55])
,"243404": np.array([0.35, 0.44, 0.32])
,"617953": np.array([0.23, 0.78, 0.24])
,"590448": np.array([0.67, 0.12, 0.10])}
例如,为了澄清,对于第三行(索引 2),243404 和 617953 的文章嵌入分别是 [0.35, 0.44, 0.32] 和 [0.23, 0.78, 0.24]。平均文章嵌入计算为所有元素的元素相加除以文章数量,因此:([0.35, 0.44, 0.32]+[0.23, 0.78, 0.24])/2=[0.29, 0.61, 0.28]。
预期输出:
id dim1 dim2 dim3 target
0 1 0.19 0.25 0.45 607295
1 1 0.77 0.76 0.55 607303
2 2 0.29 0.61 0.28 590448
3 2 0.45 0.45 0.17 243404
实际上,我的DataFrame 有数百万行,articleno 中的列表可以包含更多项目。因此,迭代行可能太慢,可能需要更有效的解决方案(可能是矢量化的)。
而且,维数(嵌入大小)是事先知道的,但是是几百,所以列数; dim1, dim2, dim3, ... dimN 应该是动态的,基于嵌入的尺寸 (N)。
【问题讨论】:
-
这使您之前的问题真正成为XY-problem。你可以从原始数据中轻松解决问题。
-
@QuangHoang 你能扩展一下吗?我对如何以更有效的方式构建数据预处理持开放态度。
标签: python python-3.x pandas list numpy