计算矩阵中的nXn-R?

时间:2019-10-18 18:14:55

标签: r

我将图像转换为0和1的100x100矩阵。

ntile是nXn选择。我正在尝试计算矩阵中有2个图块,其中最左边的2个条目为1,最右边的2个条目为0。

例如

[1 0]
[1 0]

关于如何启动此功能的任何想法?我对R很陌生。非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以将尺寸大于ntile的较大矩阵的所有块子集化,然后检查块中的所有元素是否与ntile的相应元素匹配。

#Data
set.seed(1)
m = matrix(sample(1:0, 16, TRUE), 4)
m[3, 4] = 0

ntile = rbind(1:0, 1:0)

n = dim(ntile)

ans = t(sapply(n[1]:nrow(m), function(i){
    sapply(n[2]:ncol(m), function(j){
        temp = m[(i- nrow(ntile) + 1):i, (j - ncol(ntile) + 1):j]
        all(temp == ntile)
    })
}))
ans
#      [,1]  [,2]  [,3]
#[1,] FALSE FALSE FALSE
#[2,] FALSE FALSE FALSE
#[3,] FALSE FALSE  TRUE

sum(ans)
#[1] 1

答案 1 :(得分:1)

如果我正确理解了您的问题,这是一个简单的解决方案:

set.seed(123)

size <- 4
m <- matrix(sample(0:1, 12, replace = TRUE), size-1, size)
m <- rbind(m, c(0,0,1,0))

sum(m[1:(size-1),1:(size-1)] == 1  & m[2:size,1:(size-1)] == 1 &
      m[1:(size-1),2:size] == 0 & m[2:size,2:size] == 0)

输入

     [,1] [,2] [,3] [,4]
[1,]    0    1    1    0
[2,]    1    1    1    1
[3,]    0    0    1    0
[4,]    0    0    1    0

输出

# 1

您可以确保2个图块的数量为1。