Я хочу сгенерировать случайную матрицу M x N
с нулями и со следующими специальными свойствами:
1) Они есть только в m
из M
строк.
2) Они есть только в n
столбцов N
.
Предположим, мне даны ТОЛЬКО M=10
, N=10
, m=6
и n=4
. Одна возможная случайная матрица определяется как
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 0 1 0 0 0 1 0 1 0
[2,] 0 0 1 0 0 0 1 0 1 0
[3,] 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 1 0 0 0 1 0 0 0
[6,] 0 1 0 0 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 0 0 0 0
[8,] 0 0 1 0 0 0 0 0 0 0
[9,] 0 0 1 0 0 0 0 0 1 0
[10,] 0 0 0 0 0 0 0 0 0 0
Для воспроизводимости я искусственно сгенерировал вышеупомянутую "случайную" матрицу, используя
ex <- matrix(0,10,10)
ex[1,3] <- ex[1,7] <- ex[1,9] <- ex[2,3] <- ex[2,7] <-
ex[2,9] <- ex[5,3] <- ex[5,7] <- ex[6,2] <- ex[8,3] <- ex[9,3] <- ex[9,9] <- 1
Обратите внимание, что
sum(rowSums(ex)>0)
[1] 6
sum(colSums(ex)>0)
[1] 4
, которые точно соответствуют m
и n
выше. Количество из них может быть случайным. В одном крайнем случае у меня может быть 6 столбцов, распределенных по 6 строкам и 4 столбцам (2 столбца будут иметь 2 столбца, в то время как у остальных - 1), а в другом крайнем случае у меня может быть 24 (каждый из 6 рядов будет иметь 1 в тех же 4 колонках).
Вопрос
Я могу сгенерировать это методом грубой силы, используя выборки по строкам и столбцам, но мне нужно сделать это по тысячам таких матриц (потому что m
и n
будут отличаться каждый раз), и эти матрицы большие ( M=5000
и N=8000
, как правило). Есть ли способ сделать это эффективно в R
?