假设我们有一个看起来如下的矩阵:
-0.3 0.2 0.001 -0.4 0.5
0.25 0.45 0.2 -0.001 0.02
0.8 - 0.2 0.35 0.1 0.1
0.25 -0.14 -0.1 0.02 0.4
现在,我想找到矩阵中尺寸为2 x 2并具有最大元素(以绝对值表示)的部分。因此,这将是以下索引:
2 1
2 2
3 1
3 2
因为
0.25 0.4
0.8 -0.2
是矩阵的该部分,在该矩阵中具有所有2 x 2矩阵的最大值。
如何在R中实现呢?
我做了这个小例子,因为我的真实矩阵包含大约4000列和5000行,但是该矩阵中的许多值几乎为零。这很难可视化,因此出于这个原因,我只想将最重要的可视化。
您可以which
用来查找矩阵的最大值的索引。
set.seed(1234)
mat <- matrix(sample(1:20), ncol = 5)
mat
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 14 8 20 17
# [2,] 12 10 6 15 16
# [3,] 11 1 7 2 19
# [4,] 18 4 5 9 13
which(mat == max(mat), arr.ind = TRUE)
# row col
# [1,] 1 4
如果要在每一列(或每一行)中查找最大值,则可以使用:
apply(mat, 2, which.max)
# [1] 4 1 1 1 3
问题澄清后进行编辑
mrow <- nrow(mat); mcol <- ncol(mat)
subs <- list()
for (i in 1:(nrow(mat) - 1)) {
for (j in 1:(ncol(mat) - 1)) {
x <- c(i, j, i, j + 1, i + 1, j, i + 1, j + 1)
subs[[paste0(i, j)]] <- matrix(x, ncol = 2, byrow = TRUE)
}
}
sums <- sapply(subs, function (x) sum(abs(mat[x])))
win <- subs[[which(sums == max(sums))]]
mat[win[1, 1]:(win[1, 1] + 1), win[1, 2]:(win[1, 2] + 1)]
# [,1] [,2]
# [1,] 20 17
# [2,] 15 16
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句