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

推荐项目中如何将电影ID数据转为指定CSR格式稀疏矩阵?

生成对角CSR稀疏矩阵的解决方案

嘿,我来帮你搞定这个推荐系统里的稀疏矩阵问题!你想要的是行和列都对应电影ID、仅对角线位置为1的CSR格式稀疏矩阵对吧?之前用np.diag和直接转csr_matrix没成功,主要是没抓住稀疏对角矩阵的正确生成逻辑,我给你一步步拆解:

问题分析

你需要的是对角稀疏矩阵:只有行ID与列ID相等的位置值为1,其余为0。直接用np.diag会生成稠密矩阵(电影数量多的话会占用大量内存),而csr_matrix(items.values)只是把ID列转成了普通列矩阵,完全不是对角结构,所以达不到要求。

正确实现步骤

我们可以用scipy.sparse里的diags函数直接生成稀疏对角矩阵,再指定为CSR格式,完美匹配你的需求:

  1. 先提取所有唯一的电影ID并排序(保证矩阵行列的ID顺序完全对应)
  2. 用diags创建对角线全为1的稀疏矩阵,指定格式为CSR、数据类型为int32
  3. 可选:给矩阵绑定ID标签,方便后续关联电影ID

代码示例

假设你的DataFrame名为movie_df,代码如下:

import pandas as pd
from scipy.sparse import diags, csr_matrix

# 示例数据(替换成你的真实DataFrame)
movie_df = pd.DataFrame({'ID': [1, 2, 3, 4], 'Movie': ['A', 'B', 'C', 'D']})

# 获取唯一电影ID并排序,确保行列顺序对应
unique_movie_ids = movie_df['ID'].unique()
unique_movie_ids.sort()

# 生成对角CSR稀疏矩阵,对角线全为1, dtype指定为int32
diag_sparse_matrix = diags(
    diagonals=[1] * len(unique_movie_ids),
    format='csr',
    dtype='numpy.int32'
)

# 可选:给矩阵设置行列名称,方便关联电影ID
diag_sparse_matrix.index = unique_movie_ids
diag_sparse_matrix.columns = unique_movie_ids

# 查看结果
print(diag_sparse_matrix)

输出效果

运行后你会得到类似这样的输出:

<sparse matrix of type '<class 'numpy.int32'>' with 4 stored elements in Compressed Sparse Row format>

完全符合你想要的稀疏格式,而且内存效率极高——只存储对角线的1元素,不会浪费空间在大量的0上。

额外说明

如果你的电影ID不是连续的(比如存在ID=1,3,5这样的情况),这个方法依然有效:矩阵的行列会按唯一ID的排序结果排列,每个ID对应的对角线位置都会被设为1,完美适配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:56:52