#r #image #matrix #plot
#r #изображение #матрица #график
Вопрос:
У меня есть много матриц размером 300 * 300, которые сохранены в списке с именем L. Это двоичная матрица, у меня есть только значения 0 и 1. Я строю изображение из этой матрицы (например, с помощью c.img).
Каков наилучший способ создать стек из этих матриц? Я хочу создать новую матрицу и / или пиксель в позиции (i, j), я хочу просмотреть всю мою матрицу, сохраненную в L, и если одна или несколько матриц имеют 1 в этой позиции, то пиксель (i, j) в моей новой матрице будет иметь значение 1, иначе 0.
Вот псевдокод, который поможет вам понять мою цель
L <- list(rep(matrix(0 or 1,300,300),n)
new_matrix<-matrix(0,300,300)
new_matrix[i,j]<- max(L[i,j])
но этот код не работает, потому что данные представляют собой список. Я почти уверен, что смогу выполнить эту задачу, используя 3 цикла (i, j, n), но поскольку у меня много матриц, это займет слишком много времени, и я ищу более быстрое решение.
Комментарии:
1. Спасибо! Работает очень хорошо! Я нашел другое решение: добавить всю матрицу и в новую матрицу все значения > 1 -> 1.
Ответ №1:
Вы можете использовать :
matrix(as.numeric(Reduce(` `, data) > 0), 300, 300)
Суммируйте всю матрицу, затем преобразуйте значения, большие 0, в 1 с помощью as.numeric
.
Ответ №2:
Я бы использовал многомерный массив, если все изображения имеют одинаковые размеры.
# Two matrices
m1 <- matrix(1,5,5)
m2 <- matrix(0,5,5)
# Placing them in an array (two matrices of dimension 5x5)
my_array <- array(c(m1,m2),dim = c(5,5,2))
# Investigating content of position 1,1 for matrices 1 to 2
my_array[1,1,1:2]
[1] 1 0
# You can even look at larger regions across matrices
> my_array[1:3,1:3,1:2]
, , 1
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
, , 2
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0