С учетом такой матрицы:
m = matrix(c(c(0,0,0,0,0,1,1,1,0,0),
c(0,0,1,0,0,0,0,1,0,0),
c(0,1,0,1,1,1,0,0,0,0),
c(0,1,0,0,0,1,0,1,0,0),
c(0,0,1,0,0,1,0,1,0,0),
c(0,0,1,1,1,1,0,1,0,0),
c(0,0,1,1,1,0,0,1,0,0),
c(0,0,0,0,0,0,0,0,0,0)), ncol = 10, byrow = T)
Я мог бы каким-то образом применить что-то вроде одномерной split
функции. Например: для строки [1]
0 1 1 0 0 1 1 1 0 0
split(row[1])
= [1 1 1], [1 1]
, потому что в качестве значения обрезки и обрезки я принимаю нули. Так что в моем примере с массивом я ожидаю получить 3 меньшие матрицы:
М 1
a = matrix(c(c(0,1,0,0,0),
c(1,0,1,1,1),
c(1,0,0,0,1),
c(0,1,0,0,1),
c(0,1,1,1,1),
c(0,1,1,1,0)), ncol = 5, byrow = T)
М 2
b = matrix(c(c(1,1,1),
c(0,0,1)), ncol = 3, byrow = T)
М 3
c = matrix(c(c(1),
c(1),
c(1),
c(1)), ncol = 1, byrow = T)
если я не ошибаюсь. Это какой-то простой способ добиться этого? Я сейчас код в R (но, возможно, Python). В принципе, я могу использовать его для 1D, но в 2D это становится сложнее, потому что строки зависят от столбцов. Кстати, мне нужно сохранить координаты исходного размещения.
EDIT
Я отредактировал ввод, чтобы быть воспроизводимым. У меня есть хит, это растровое решение: как сохранить координаты или исходную матрицу?
Это означает, что идентификаторы строк и столбцов для каждой новой матрицы из исходной матрицы.