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

如何为重复次数不同的样本高效构建选择矩阵?

构建自定义重复次数的选择矩阵(R语言)

回顾统一重复次数的实现

当所有样本重复次数相同时,可通过克罗内克积快速生成选择矩阵:

n = 5
t = 3
Select_M = diag(n) %x% matrix(1, t)

生成的矩阵如下:

[,1] [,2] [,3] [,4] [,5]
 [1,]    1    0    0    0    0
 [2,]    1    0    0    0    0
 [3,]    1    0    0    0    0
 [4,]    0    1    0    0    0
 [5,]    0    1    0    0    0
 [6,]    0    1    0    0    0
 [7,]    0    0    1    0    0
 [8,]    0    0    1    0    0
 [9,]    0    0    1    0    0
[10,]    0    0    0    1    0
[11,]    0    0    0    1    0
[12,]    0    0    0    1    0
[13,]    0    0    0    0    1
[14,]    0    0    0    0    1
[15,]    0    0    0    0    1

自定义不同重复次数的高效实现

如果每个样本需要设置不同的重复次数,比如第一个样本重复7次、第二个11次,推荐以下两种高效方法:

方法1:基础R向量化实现(推荐中小规模数据)

利用R的矩阵索引特性,直接提取单位矩阵的行并按指定次数复制,全程向量化操作,简洁高效:

# 定义每个样本的重复次数向量
repeat_counts <- c(7, 11, 5, 3, 8)
n <- length(repeat_counts)

# 生成自定义选择矩阵
Select_M_custom <- diag(n)[rep(1:n, repeat_counts), ]

方法2:稀疏矩阵实现(推荐大规模数据)

当样本数或重复次数极大时,普通矩阵会占用大量内存,此时用Matrix包的稀疏矩阵存储非零元素,能大幅节省资源:

library(Matrix)

repeat_counts <- c(7, 11, 5, 3, 8)
n <- length(repeat_counts)

# 生成稀疏选择矩阵
Select_M_sparse <- do.call(rbind, lapply(1:n, function(i) {
  sparseMatrix(
    i = rep(1, repeat_counts[i]), 
    j = rep(i, repeat_counts[i]), 
    x = 1, 
    dims = c(repeat_counts[i], n)
  )
}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:53:08