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

优化Numpy相关矩阵中的循环,提升大数据量代码运行效率

优化价格敏感性计算的矩阵构建与性能问题

核心问题分析

你的代码在大数据量下的性能瓶颈是通过循环构建Product和Rating相关矩阵,Python原生循环处理10000行数据会产生1亿次以上的操作,直接导致运行时间过长甚至崩溃。解决方案是用numpy的向量化操作替代循环,借助底层C实现的并行计算能力大幅提升效率。

优化方案

1. 向量化构建Product相关矩阵

按照你的逻辑:对角线值为0,行列产品名称相同时值为1,其余为0.5。利用numpy广播机制直接生成矩阵:

import numpy as np
import pandas as pd

# 生成Product相关矩阵
prod_arr = data['Product'].to_numpy()
prod_matrix = np.where(prod_arr[:, None] == prod_arr, 1.0, 0.5)
np.fill_diagonal(prod_matrix, 0.0)  # 对角线设为0

2. 向量化构建Rating相关矩阵

逻辑:对角线值为0,行列评分相同时值为1,不同则为0.8。同样用向量化实现:

# 生成Rating相关矩阵
rating_arr = data['Rating'].to_numpy()
rating_matrix = np.where(rating_arr[:, None] == rating_arr, 1.0, 0.8)
np.fill_diagonal(rating_matrix, 0.0)  # 对角线设为0

3. 合并矩阵并计算最终结果

直接用numpy矩阵运算替代不必要的DataFrame中间转换,减少内存开销:

# 合并Product和Rating矩阵
df_pkl = prod_matrix * rating_matrix

# 计算价格敏感性结果
s = data['Price'].to_numpy().reshape(-1, 1)  # 转为列向量
t = s @ s.T  # 等价于np.multiply(s, s.transpose()),矩阵乘法更高效
u = t * df_pkl
z = pd.DataFrame(u)

性能提升原理

  • 向量化操作:numpy的广播和矩阵运算都是底层C优化的,避免了Python循环的解释器开销,10000行数据的矩阵构建和计算可在几秒内完成。
  • 减少中间变量:跳过不必要的DataFrame转换,直接用numpy数组运算,降低内存占用,避免大数据量下的内存溢出。

测试验证

用你提供的测试数据运行上述代码,得到的结果与原逻辑完全一致,但执行效率提升几个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:50:00