Если вы разрешите основную диагональ равной 1, то в этой матрице всегда будут две уникальные строки v
и 1 - v
, независимо от того, насколько велика v
.Поскольку матрица симметрична, у нее также есть два таких уникальных столбца.Это упрощает построение этой матрицы.
## example `v`
set.seed(0)
v <- sample.int(2, 10, replace = TRUE) - 1L
#[1] 1 0 0 1 1 0 1 1 1 1
## column expansion from unique columns
cbind(v, 1 - v, deparse.level = 0L)[, 2 - v]
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 1 0 0 1 1 0 1 1 1 1
# [2,] 0 1 1 0 0 1 0 0 0 0
# [3,] 0 1 1 0 0 1 0 0 0 0
# [4,] 1 0 0 1 1 0 1 1 1 1
# [5,] 1 0 0 1 1 0 1 1 1 1
# [6,] 0 1 1 0 0 1 0 0 0 0
# [7,] 1 0 0 1 1 0 1 1 1 1
# [8,] 1 0 0 1 1 0 1 1 1 1
# [9,] 1 0 0 1 1 0 1 1 1 1
#[10,] 1 0 0 1 1 0 1 1 1 1
Какова цель этой матрицы?
Если есть n0
нулей и n1
единиц, матрица будет иметь размерность(n0 + n1) x (n0 + n1)
, но в матрице только (n0 x n0 + n1 x n1)
.Таким образом, для длинного вектора v
матрица является разреженной.Фактически, он имеет супер разреженность, так как имеет большое количество дублированных строк / столбцов.
Очевидно, что если вы хотите сохранить позицию 1 в этой матрице, вы можете просто получить ее, не формируя эту матрицу ввсе.