You need to enable JavaScript to run this app. 使用Breeze统计稀疏矩阵CSCMatrix每行的非零元素个数
优惠活动
大模型
产品
解决方案
定价
更多

使用Breeze统计稀疏矩阵CSCMatrix每行的非零元素个数

方案1:小矩阵快速实现

如果你的矩阵规模不大,可以直接用Breeze内置的countNonZero算子逐行统计非零元素:

import breeze.linalg.{CSCMatrix, DenseVector, countNonZero}

val matrix = CSCMatrix.tabulate(3, 2)((x,y) => x*y)

val rowNonZeroCount = DenseVector.tabulate(matrix.rows) { rowId =>
  countNonZero(matrix(rowId, ::))
}

输出结果为DenseVector(0, 1, 1),完全符合你的预期。


方案2:大矩阵高性能实现

CSCMatrix是列优先存储的稀疏矩阵,逐行取切片会产生额外开销,如果你的矩阵规模较大,可以直接操作其底层存储数组实现统计,时间复杂度仅为O(nnz)(nnz为矩阵非零元素总数),性能提升非常明显:

import breeze.linalg.{CSCMatrix, DenseVector}

val matrix = CSCMatrix.tabulate(3, 2)((x,y) => x*y)

// 初始化行计数数组
val countArr = new Array[Int](matrix.rows)
// 遍历所有非零元素的行索引,对应行计数累加
matrix.rowIndices.foreach(row => countArr(row) += 1)
// 转换为Breeze向量(无需的话也可以直接用Array)
val rowNonZeroCount = DenseVector(countArr)

该方案输出结果和方案1完全一致,且不需要遍历矩阵的零元素,适合生产环境处理大规模稀疏矩阵。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 00:36:11