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

如何快速构造判断产品是否来自同一网店的n×n二进制关联矩阵

优化方案

你原来的双层循环属于Python层面的O(n²)迭代,1624维度下要执行两百多万次判断,耗时很高。直接用numpy向量化广播操作可以把运算下沉到C底层,性能提升几个数量级:

方案1:广播对比(最简洁)

import numpy as np
import pandas as pd

# 提取webshops列转为numpy数组
webshop_arr = df['webshops'].values
# 利用广播直接做全量对比,转成整型0/1
dist_matrix = (webshop_arr[:, np.newaxis] == webshop_arr).astype(int)
# 生成行列索引为产品名的结果矩阵
result_df = pd.DataFrame(dist_matrix, index=df['products'], columns=df['products'])

方案2:独热编码矩阵乘法(适合webshop分类非常多的场景)

import pandas as pd

# 对webshops做独热编码
one_hot = pd.get_dummies(df['webshops']).values
# 矩阵乘自身转置即可得到同店铺标记矩阵
dist_matrix = (one_hot @ one_hot.T).astype(int)
result_df = pd.DataFrame(dist_matrix, index=df['products'], columns=df['products'])

性能说明

以n=1624的规模测试,上述两种方案的耗时都在10ms以内,远低于原始双层循环的数秒级耗时。

注意事项

如果products列存在重复值,结果矩阵的行列索引会重复,建议优先使用产品唯一ID作为索引避免歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:15:04