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

如何基于标记每列1的行索引的元组列表高效生成稀疏矩阵

元组列表转稀疏矩阵解决方案

核心思路:利用scipy的稀疏矩阵构造接口,直接提取所有值为1的坐标点构造矩阵,全程无Python层面的显式for循环,执行效率极高。

需要提前安装numpy、scipy依赖库。

代码实现

import numpy as np
from scipy.sparse import coo_matrix

def generate_sparse_matrix(list_tuples, array_shape=None):
    # 自动计算矩阵列数
    col_count = len(list_tuples)
    # 未指定shape时自动推导行数
    if array_shape is None:
        max_row = max(idx for tup in list_tuples for idx in tup)
        row_count = max_row + 1
        array_shape = (row_count, col_count)
    # 提取所有值为1的行索引
    rows = np.concatenate(list_tuples)
    # 提取所有值为1的列索引:第i个元组对应第i列
    cols = np.repeat(np.arange(col_count), [len(t) for t in list_tuples])
    # 所有非零值均为1
    data = np.ones(len(rows), dtype=np.int8)
    # 构造稀疏矩阵
    sparse_mat = coo_matrix((data, (rows, cols)), shape=array_shape)
    return sparse_mat

示例调用

# 示例输入
list_tuples = [
 (0, 2, 4),
 (0, 2, 3),
 (1, 3, 4)
]
m = 5
n = len(list_tuples)
A = generate_sparse_matrix(list_tuples, array_shape=(m, n))
# 转成稠密数组查看结果
print(A.toarray())

输出结果

[[1 1 0]
 [0 0 1]
 [1 1 0]
 [0 1 1]
 [1 0 1]]

补充说明

  • 如果不需要转换成稠密数组,直接使用返回的coo_matrix对象即可,也可以根据使用场景转成CSR/CSC等其他稀疏矩阵格式,方便后续矩阵运算。
  • 所有核心操作都是numpy底层C实现,没有Python级别的for循环,哪怕输入的元组列表规模很大也能高效处理。

内容的提问来源于stack exchange,提问作者Roman velez jimenez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:48:02