在R中找到矩阵的模式?
我有一个叫做my_矩阵的矩阵,有5行5列,由1和0组成在R中找到矩阵的模式?,r,matrix,R,Matrix,我有一个叫做my_矩阵的矩阵,有5行5列,由1和0组成 test.matrix <- matrix(c(0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1),nrow=5) test.matrix [,1] [,2] [,3] [,4] [,5] [1,] 0 0 0 0 0 [2,] 0 1 1 0 1 [3,] 1 1 1 0 0 [4,
test.matrix <- matrix(c(0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,1),nrow=5)
test.matrix
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 1 1 0 1
[3,] 1 1 1 0 0
[4,] 0 1 1 1 0
[5,] 0 0 0 0 1
我还想找到test.matrix的right2tile模式,如图所示:
[,1] [,2]
[1,] 1 0
[2,] 1 0
[,1] [,2]
[1,] 0 1
[2,] 0 1
对于left2tile,我想找到矩阵中唯一的2-tile的数量,其中最左边的两个条目是1,最右边的两个条目是0
对于right2tile,我想找到矩阵中唯一的2-Tile数,其中最右边的两个条目是1,最左边的两个条目是0
我知道这些可能重叠。知道如何在R中计算吗?这里有一些示例函数,可以告诉您较大矩阵中有多少2x2矩阵与提供的2x2矩阵匹配。第一个助手函数创建一个2x2矩阵列表,输入矩阵由这些矩阵组成。第二个函数使用第一个helper函数并返回第二个矩阵参数中第一个矩阵参数的数量
# Helper functions
decompose=function(x) {
two_by_two=list()
k=1
for (i in 1:(nrow(x)-1)) {
for (j in 1:(ncol(x)-1)) {
two_by_two[[k]]=matrix(c(x[i,j], x[i+1,j], x[i,j+1], x[i+1,j+1]), ncol=2)
k=k+1
}
}
return(two_by_two)
}
how_many=function(x, test) {
my_list=decompose(test)
bools=sapply(my_list, function(y) {
return(identical(x, y))
})
return(sum(bools))
}
#Carrying it out
left2tile=matrix(c(1,1,0,0), ncol=2)
right2tile=matrix(c(0,0,1,1),ncol=2)
how_many(left2tile, test.matrix)
how_many(right2tile, test.matrix)
谢谢,这很有帮助