首先,我们可以使用如下代码生成随机填充的大矩阵a和小矩阵b:

# 生成随机填充的大矩阵a
set.seed(123)
a <- matrix(sample(1:9, 4000*20, replace = TRUE), ncol = 20)

# 生成随机填充的小矩阵b
set.seed(456)
b <- matrix(sample(1:9, 4*4, replace = TRUE), ncol = 4)

接着,我们可以编写一个函数来提取矩阵的上三角矩阵:

# 提取矩阵的上三角矩阵
upper_tri <- function(mat) {
  n <- nrow(mat)
  upper <- matrix(0, ncol = n, nrow = n)
  for (i in 1:n) {
    for (j in i:n) {
      upper[i,j] <- mat[i,j]
    }
  }
  return(upper)
}

然后,我们可以使用该函数提取小矩阵b的上三角矩阵:

# 提取小矩阵b的上三角矩阵
c <- upper_tri(b)

最后,我们可以使用循环遍历大矩阵a,找到和c完全相同的上三角矩阵,并返回该三角矩阵右上角元素在矩阵a中的位置:

# 遍历大矩阵a,在其中寻找和c完全相同的上三角矩阵
for (i in 1:(nrow(a)-3)) {
  for (j in 1:(ncol(a)-3)) {
    if (all(upper_tri(a[i:(i+3), j:(j+3)]) == c)) {
      cat('Found a match at (', i+3, ',', j+4, ')\n')
      plot(j+4, i+3, pch = 19, col = 'red')
    }
  }
}

这里使用了cat()函数输出匹配位置,并使用plot()函数在图中标出匹配位置。完整代码如下:

# 生成随机填充的大矩阵a
set.seed(123)
a <- matrix(sample(1:9, 4000*20, replace = TRUE), ncol = 20)

# 生成随机填充的小矩阵b
set.seed(456)
b <- matrix(sample(1:9, 4*4, replace = TRUE), ncol = 4)

# 提取矩阵的上三角矩阵
upper_tri <- function(mat) {
  n <- nrow(mat)
  upper <- matrix(0, ncol = n, nrow = n)
  for (i in 1:n) {
    for (j in i:n) {
      upper[i,j] <- mat[i,j]
    }
  }
  return(upper)
}

# 提取小矩阵b的上三角矩阵
c <- upper_tri(b)

# 遍历大矩阵a,在其中寻找和c完全相同的上三角矩阵
for (i in 1:(nrow(a)-3)) {
  for (j in 1:(ncol(a)-3)) {
    if (all(upper_tri(a[i:(i+3), j:(j+3)]) == c)) {
      cat('Found a match at (', i+3, ',', j+4, ')\n')
      plot(j+4, i+3, pch = 19, col = 'red')
    }
  }
}
R语言矩阵匹配:查找4*4矩阵上三角矩阵在大型矩阵中的位置

原文地址: https://www.cveoy.top/t/topic/nSVs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录