如何为重复次数不同的样本高效构建选择矩阵?
构建自定义重复次数的选择矩阵(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
相关产品推荐
相关产品推荐

