假设我有一个矩阵
一个
m
和一个正整数向量 v
,我想做的是得到一个新的矩阵 m_new
,并且在 m_new
中,m
的每一行(比如说 m[i, ]
)都被复制了 v[i]
次。例如:m = matrix(1:6, nrow = 3)
## [,1] [,2]
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
v = c(3, 1, 2)
而m_new
应该是:
[,1] [,2]
[1,] 1 4 # m[1, ] is replicated by
[2,] 1 4 # v[1] = 3
[3,] 1 4 # times
[4,] 2 5
[5,] 3 6
[6,] 3 6
一个
for
循环可以解决小规模问题:m_new = matrix(0, sum(v), ncol(m))
k = 1
for(i in 1:nrow(m)){
for(j in k:(k+v[i]-1)){
m_new[j, ] = m[i, ]
}
k = k + v[i]
}
但是在现实世界中,m
的行数通常很大。有没有一种高效的方法来解决这个问题?