You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MovieLens数据集高效生成用户观影二分类矩阵的方法

高效生成用户-电影二分类矩阵方案

你之前的实现速度慢是因为采用了嵌套循环+逐次DataFrame筛选的逻辑,属于纯Python层的迭代操作,时间复杂度极高。直接使用Pandas内置的矢量化运算方法可以大幅提升运行效率,具体实现如下:

方案1:使用pd.crosstab(最简洁,推荐)

pd.crosstab原生支持统计两个列的组合出现频次,刚好匹配需求:每个(userId, movieId)组合出现一次则标记为1,未出现则为0。
代码示例:

import pandas as pd

# 1. 提取全量用户ID、电影ID列表
all_user_ids = sorted(ratings_df["userId"].unique())
all_movie_ids = sorted(movies_df["movieId"].unique())

# 2. 生成交叉统计矩阵
user_movie_matrix = pd.crosstab(
    index=ratings_df["userId"],
    columns=ratings_df["movieId"]
)

# 3. 补全所有用户、电影的组合,缺失值填充为0
user_movie_matrix = user_movie_matrix.reindex(
    index=all_user_ids,
    columns=all_movie_ids,
    fill_value=0
)

方案2:使用pivot_table

如果更熟悉透视表语法,也可以用pivot_table实现相同效果:

user_movie_matrix = ratings_df.pivot_table(
    index="userId",
    columns="movieId",
    aggfunc="size", # 统计组合出现次数
    fill_value=0
).reindex(
    index=all_user_ids,
    columns=all_movie_ids,
    fill_value=0
)

性能说明

  • 原嵌套列表推导式的时间复杂度为O(U*M)(U为用户总数,M为电影总数),且每次迭代都要触发Python层的DataFrame过滤操作,MovieLens small数据集下通常需要几秒到几十秒才能跑完。
  • 上述内置方法底层为C实现的矢量化运算,相同数据集下运行耗时在100ms以内,效率提升百倍以上。

内容的提问来源于stack exchange,提问作者OverFitter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:27:04