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

求SciPy中np.minimum.outer的等效实现:高效稀疏向量最小外积

高效实现稀疏向量的最小值外积

你的朴素实现速度极慢的核心原因有两个:

  • Python嵌套循环本身效率极低,面对大型稀疏向量的非零元素组合时,O(M*N)的循环次数会直接拖慢整体速度
  • lil_matrix的随机元素写入操作开销极大,每次赋值都会触发内部结构调整

以下是高效实现方案,利用numpy向量化运算+COO矩阵批量构建,性能能接近内置逐点乘法的水平:

import numpy as np
from scipy.sparse import coo_matrix

# 提前提取两个稀疏向量的非零索引与对应值,避免重复计算
idx1 = c1.nonzero()[1]
val1 = c1[0, idx1].A.flatten()
idx2 = c2.nonzero()[1]
val2 = c2[0, idx2].A.flatten()

# 用numpy广播生成所有非零组合的行、列索引与最小值
rows = np.repeat(idx1, len(idx2))
cols = np.tile(idx2, len(idx1))
data = np.minimum(np.repeat(val1, len(idx2)), np.tile(val2, len(idx1)))

# 批量构建COO矩阵,可根据需求转换为CSR/CSC等格式
minl = coo_matrix((data, (rows, cols)), shape=(c1.shape[1], c2.shape[1]))

优化原理

  1. 向量化替代循环:numpy的repeat、tile和minimum都是底层C实现的向量化操作,比Python循环快几个数量级
  2. COO矩阵批量构建:COO矩阵的设计初衷就是快速批量构建稀疏矩阵,直接通过行、列、数据三个数组一次性生成矩阵,完全避免了LIL矩阵逐个写入的开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:05