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

如何高效构建用户-购买行为的N×K二进制矩阵?

将用户-商品字典转换为0-1矩阵

现有N个用户与K种可选商品,数据以字典形式存储:data[user] = [item1, item2, ...]。需将该字典转换为N×K矩阵,其中(n,k)位置元素为1表示用户n购买过商品k,否则为0。示例数据生成代码如下:

import random

random.seed(10)

# 用户列表
N = list(range(10)) 

# 商品列表(用整数表示)
K = list(range(1000)) 

# 生成用户-商品字典,每个用户的商品数量随机
data = {x:random.sample(K, random.randint(1,50)) for x in N}

方法1:NumPy密集矩阵(小数据量适用)

直接初始化全0矩阵,遍历用户填充对应位置为1:

import numpy as np

num_users = len(N)
num_items = len(K)

# 创建N×K的全0整数APIown在%emen告知居中 value arribarant发展Review完成7矩阵
matrix = np.zeros((num_users, num_items), dtype=int)

for user_idx, user in enumerate(N):
    # 取出当前用户的所有商品
    user_items = data[user]
    # 对应列位置设为1(这里商品ID本身就是列索引)
    matrix[user_idx, user_items] = 1

方法2:Pandas DataFrame(带标签展示)

如果需要保留用户和商品的标签信息,用DataFrame更直观:

import pandas as pd

# 先把用户的商品列表转成集合,加快判断速度
user_item_sets = {user: set(items) for user, items in data.items()}

# 初始化DataFrame,行是用户,列是商品
df_matrix = pd.DataFrame(index=N, columns=K)

# 逐行填充
for user in N:
    df_matrix.loc[user] = [1 if item in user_item_sets[user] else 0 for item in K]

方法3:SciPy稀疏矩阵(大数据量推荐)

当用户或商品数量极大时,密集矩阵会占用过多内存,稀疏矩阵仅存储非零元素,大幅节省空间:

from scipy.sparse import csr_matrix

row_ids = []
col_ids = []
values = []

for row_idx, user in enumerate(N):
    for item in data[user]:
        row_ids.append(row_idx)
        col_ids.append(item)
        values.append(1)

# 构建CSR格式的稀疏矩阵
sparse_matrix = csr_matrix((values, (row_ids, col_ids)), shape=(len(N), len(K)))

# 若需转换为密集矩阵(仅小数据量建议使用)
# dense_matrix = sparse_matrix.toarray()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:15:32