R语言矩阵匹配:查找4*4矩阵上三角矩阵在大型矩阵中的位置
首先,我们可以使用如下代码生成随机填充的大矩阵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')
}
}
}
原文地址: https://www.cveoy.top/t/topic/nSVs 著作权归作者所有。请勿转载和采集!