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

如何根据位置索引矩阵生成稀疏矩阵对应的p向量

生成CSC格式稀疏矩阵列指针p的方法

首先明确R的Matrix包中CSC(压缩稀疏列)格式的@p属性规则:

  • p的长度为稀疏矩阵总列数 + 1
  • p[j]代表第j列(R中列从1开始,p索引也从1开始)的第一个非零元素在@i、@x向量中的下标(0起始)
  • p的最后一个元素等于矩阵总非零元素个数,等于nrow(positions)

手动计算步骤

  1. 先确定你的稀疏矩阵总列数,你可以根据业务需求指定,也可以直接从positions中取最大列索引计算:
# 示例中最大列索引为3,所以总列数设为3
n_col <- max(positions[, "col"])
  1. 统计每一列的非零元素个数,没有非零元素的列计数为0:
# 用factor固定列顺序,避免没有非零元素的列被丢弃
col_nonzero_cnt <- table(factor(positions[, "col"], levels = 1:n_col))
  1. 对列计数累加后,开头补0就是最终的p向量:
p <- c(0, cumsum(col_nonzero_cnt))

示例验证

对应你给出的示例数据:

  • 列1非零计数为2,列2非零计数为0,列3非零计数为1
  • col_nonzero_cnt结果为2 0 1
  • 累加后结果为2 2 3
  • 补0后得到的p为0 2 2 3,完全符合CSC格式要求

更简单的实现(推荐)

如果你不需要手动拆解属性,直接用Matrix包的sparseMatrix函数即可一键生成符合要求的稀疏矩阵,自动计算@i/@x/@p:

library(Matrix)
SMatrix <- sparseMatrix(
  i = positions[, "row"],
  j = positions[, "col"],
  x = rep(1, nrow(positions))
)
# 直接提取p即可
p <- SMatrix@p

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:03