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

如何对Scipy稀疏COO矩阵特定列元素求和以重塑矩阵

解决方案

针对你的需求,有两种更简洁高效的实现方式,无需手动循环:

方法1:转为密集数组后用reshape+sum(适合小规模矩阵)

如果你的稀疏矩阵规模不大,转为密集数组后可以用numpy的reshape和sum一步完成列分组求和:

import numpy as np

# 先转为密集数组
dense_arr = v.toarray()
# 将数组重塑为(3, 2, 2),然后沿最后一个维度求和
result = dense_arr.reshape(3, 2, 2).sum(axis=2)

执行后result就是你要的(3,2)矩阵:

array([[3, 4],
       [3, 1],
       [10, 14]])

方法2:直接操作稀疏COO矩阵(适合大规模稀疏矩阵)

如果矩阵规模很大,转为密集数组会占用过多内存,可以直接基于COO矩阵的row、col、data属性处理,避免转换为密集数组:

from scipy.sparse import coo_matrix

# 定义列映射规则:原列0→0,2→0;原列1→1,3→1
col_map = {0: 0, 1: 1, 2: 0, 3: 1}
new_col = np.array([col_map[c] for c in v.col])

# 构建新的COO矩阵并合并重复索引的元素
result_sparse = coo_matrix((v.data, (v.row, new_col)), shape=(3, 2))
# 合并重复位置的求和(COO矩阵允许重复索引,需要手动合并)
result_sparse.sum_duplicates()

# 如果需要转为密集数组查看结果,执行:
# result_sparse.toarray()

这种方法全程保持稀疏矩阵格式,内存效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:50:24