使用R语言将1-9随机填入400020的大矩阵a1-9随机填入产生一个44的小矩阵b。将小矩阵b的上三角矩阵10个元素作为一个单元c在大矩阵a中寻找这个单元找出矩阵a中和c完全相同的上三角矩阵对应位置元素相等返回该三角矩阵右上角元素在矩阵a中的位置并画图标出。
首先,我们可以使用如下代码生成随机填充的大矩阵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")
}
}
}
``
原文地址: http://www.cveoy.top/t/topic/ezyL 著作权归作者所有。请勿转载和采集!