Рассчитать nXn в матрице - R? - PullRequest
4 голосов
/ 18 октября 2019

Я преобразовал изображение в матрицу 100x100 из 0 и 1.

Ntile - это nXn выбор. Я пытаюсь подсчитать, сколько 2 плиток в матрице. 2 левые самые большие записи равны 1, а две самые правые записи равны 0.

Например,

[1 0]
[1 0]

Любая идея окак начать это? Я совсем новичок в R. Большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Вы можете установить все фрагменты большей матрицы с размерами, равными 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 голос
/ 18 октября 2019

Вот простое решение, если я правильно понял ваш вопрос:

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

Вы можете убедиться, что количество плиток равно 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...