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

如何对scipy稀疏矩阵采样部分行以生成新的scipy稀疏矩阵

如何对Scipy稀疏矩阵进行行采样并生成新的稀疏矩阵

这个问题其实很好解决,Scipy的稀疏矩阵支持和NumPy数组类似的索引操作,不过有个小细节要注意——选对矩阵格式能让行采样更高效。

核心步骤

  1. 优先转换为CSR格式
    CSR(Compressed Sparse Row)格式是专门为行操作优化的,如果你原矩阵是其他格式(比如CSC、COO),建议先转成CSR,这样行切片的速度会快很多:

    import scipy.sparse as sp
    
    # 假设你的原矩阵是A,转换为CSR格式
    A_csr = A.tocsr()
    
  2. 直接通过索引提取目标行
    和NumPy数组一样,你可以用列表指定要提取的行索引(注意:Python是0-based索引,也就是第一行对应索引0)。比如你说的10行矩阵,要提取日常计数的第1、3、4行,对应0-based的索引就是[0, 2, 3];如果是按0-based计数的第1、3、4行,直接用[1, 3, 4]即可。

    示例代码:

    # 先创建一个10行的示例稀疏矩阵(方便你测试)
    A = sp.random(10, 5, density=0.2, format='csr')
    
    # 指定要提取的行(这里用0-based的[0,2,3]对应日常的第1、3、4行)
    selected_row_indices = [0, 2, 3]
    # 提取行生成新的稀疏矩阵B
    B = A[selected_row_indices, :]
    
  3. 验证结果
    你可以打印新矩阵的形状来确认是否正确:

    print(B.shape)  # 输出应该是(3, 5),对应3行5列的稀疏矩阵
    

额外提示

  • 如果要提取连续的行,比如第2到第5行(0-based是1到4),可以直接用切片:B = A[1:5, :]
  • 如果你的矩阵已经是CSR格式,直接跳过转换步骤就行;CSC格式虽然也支持行切片,但效率会低一些,因为它是按列存储的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:44