【发布时间】:2019-04-07 16:35:33
【问题描述】:
我有一个关于划分矩阵的问题。
我有 100 行和 1024 列的数据。我想将该矩阵拆分为 2 个子矩阵,以便矩阵 1 为 8 行,矩阵 2 为 2 行
将形成第一个矩阵
r1
r2
r3
r4
r5
r6
r7
r8
r11
r12
r13
...
...
第二个矩阵将形成
r9
r10
r19
r20
...
...
【问题讨论】:
我有一个关于划分矩阵的问题。
我有 100 行和 1024 列的数据。我想将该矩阵拆分为 2 个子矩阵,以便矩阵 1 为 8 行,矩阵 2 为 2 行
将形成第一个矩阵
r1
r2
r3
r4
r5
r6
r7
r8
r11
r12
r13
...
...
第二个矩阵将形成
r9
r10
r19
r20
...
...
【问题讨论】:
一种选择是使用rep 创建一个逻辑索引,然后将其用于split matrix 的行序列,根据list 中的索引向量对matrix 进行子集化
out <-lapply(split(seq_len(nrow(m1)), rep(rep(c(TRUE, FALSE), c(8, 2)),
length.out = nrow(m1))), function(i) m1[i, ] )
此外,正如 cmets 中提到的 @user20650,?split.data.frame 也可以用于矩阵(基于文档)
数据框方法也可用于将矩阵拆分为矩阵列表,替换形式同样适用,前提是显式调用它们。
out1 <- split.data.frame(m1, rep(rep(c(TRUE, FALSE), c(8, 2)),
length.out = nrow(m1)))
set.seed(24)
m1 <- matrix(rnorm(100 * 1024), nrow = 100, ncol = 1024)
【讨论】:
split.default`,然后认为我必须将矩阵转换为 data.frame 才能做到这一点
可能最简单的方法是定义索引,然后对矩阵进行子集化:
idx10 <- 1:10*10 # contains 10, 20, 30, ..., 100
idx9 <- idx10 - 1 #contain 9, 19, 29, ..., 99
idx <- c(idx9, idx10)
a <- matrix(rnorm(200), nrow = 100)
a_910 <- a[idx,]
a_rest <- a[-idx]
【讨论】: