使用向量化对矩阵与 R 中的向量进行逐行比较
Row wise comparison of a matrix with a vector in R using vectorization
我想将矩阵的每一行与向量进行比较,并生成第 i 行中小于 的第一个值的索引向量中的第 i 个值。矩阵每一行中的值按降序排列。由于行数非常大,我正在寻找矢量化解决方案,希望避免循环并应用函数。
例如,如果我想比较下面的矩阵M和向量v,那么输出应该是(3,2,3,NA)。
M = matrix(c(10.2,11.0,10,9.5,9.2,8.9,7.6,8.4,5.4,5.6,6.5,7.2),4,3)
M
[,1] [,2] [,3]
[1,] 10.2 9.2 5.4
[2,] 11.0 8.9 5.6
[3,] 10.0 7.6 6.5
[4,] 9.5 8.4 7.2
v <- c(8.4,9.5,7.0,6.0)
The output should be (3,2,3,NA).
当我在 R 中使用 'which' 函数时,它适用于每一行但未矢量化。
which(M[2,]<v[2])[1]
2
which(M[3,]<v[3])[1]
3
谢谢!
矢量化选项为 max.col
max.col(M < v, 'first') *NA^!rowSums(M < v)
#[1] 3 2 3 NA
apply(M < v, 1, function(x) which(x)[1])
# [1] 3 2 3 NA
我想将矩阵的每一行与向量进行比较,并生成第 i 行中小于 的第一个值的索引向量中的第 i 个值。矩阵每一行中的值按降序排列。由于行数非常大,我正在寻找矢量化解决方案,希望避免循环并应用函数。
例如,如果我想比较下面的矩阵M和向量v,那么输出应该是(3,2,3,NA)。
M = matrix(c(10.2,11.0,10,9.5,9.2,8.9,7.6,8.4,5.4,5.6,6.5,7.2),4,3)
M
[,1] [,2] [,3]
[1,] 10.2 9.2 5.4
[2,] 11.0 8.9 5.6
[3,] 10.0 7.6 6.5
[4,] 9.5 8.4 7.2
v <- c(8.4,9.5,7.0,6.0)
The output should be (3,2,3,NA).
当我在 R 中使用 'which' 函数时,它适用于每一行但未矢量化。
which(M[2,]<v[2])[1]
2
which(M[3,]<v[3])[1]
3
谢谢!
矢量化选项为 max.col
max.col(M < v, 'first') *NA^!rowSums(M < v)
#[1] 3 2 3 NA
apply(M < v, 1, function(x) which(x)[1])
# [1] 3 2 3 NA