給出矩陣M和具有不同可能值的較小矩陣,我試圖列出將這些小矩陣的組合疊加到矩陣M中產生的所有可能矩陣。小矩陣是插入到具有相同行/列名稱的M的位置中。將小矩陣粘貼到大矩陣中的所有可能矩陣
例如,假設有:
M <- matrix(rep(0, 49), nrow =7, ncol =7)
rownames(M) <- colnames(M) <-seq(1,7)
> M
1 2 3 4 5 6 7
1 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0
# Generate first set of small matrices:
sub_mat_1_1 <- matrix(rep(1, 9), nrow =3, ncol =3)
rownames(sub_mat_1_1) <- colnames(sub_mat_1_1) <- c(2,3,5)
sub_mat_1_2 <- matrix(rep(2, 9), nrow =3, ncol =3)
rownames(sub_mat_1_2) <- colnames(sub_mat_1_2) <- c(2,3,5)
sub_mat_1_3 <- matrix(rep(3, 9), nrow =3, ncol =3)
rownames(sub_mat_1_3) <- colnames(sub_mat_1_3) <- c(2,3,5)
submatrix_1 <- list(sub_mat_1_1, sub_mat_1_2, sub_mat_1_3)
# Generate second set of small matrices:
submatrix_2 <- list()
sub_mat_2_1 <- matrix(rep(1, 4), nrow =2, ncol =2)
rownames(sub_mat_2_1) <- colnames(sub_mat_2_1) <- c(1,6)
sub_mat_2_2 <- matrix(rep(2, 4), nrow =2, ncol =2)
rownames(sub_mat_2_2) <- colnames(sub_mat_2_2) <- c(1,6)
submatrix_2 <- list(sub_mat_2_1, sub_mat_2_2)
# Generate list of small matrices:
submatrices <- list()
submatrices[[1]] <- submatrix_1
submatrices[[2]] <- submatrix_2
[[1]]
[[1]][[1]]
2 3 5
2 1 1 1
3 1 1 1
5 1 1 1
[[1]][[2]]
2 3 5
2 2 2 2
3 2 2 2
5 2 2 2
[[1]][[3]]
2 3 5
2 3 3 3
3 3 3 3
5 3 3 3
[[2]]
[[2]][[1]]
1 6
1 1 1
6 1 1
[[2]][[2]]
1 6
1 2 2
6 2 2
由於有3種可能性用於第二第一小矩陣集和2中,我試圖輸出,而無需使用一個for循環中,所有6點可能的矩陣作爲列表:
[[1]]
1 2 3 4 5 6 7
1 1 0 0 0 0 1 0
2 0 1 1 0 1 0 0
3 0 1 1 0 1 0 0
4 0 0 0 0 0 0 0
5 0 1 1 0 1 0 0
6 1 0 0 0 0 1 0
7 0 0 0 0 0 0 0
[[2]]
1 2 3 4 5 6 7
1 1 0 0 0 0 1 0
2 0 2 2 0 2 0 0
3 0 2 2 0 2 0 0
4 0 0 0 0 0 0 0
5 0 2 2 0 2 0 0
6 1 0 0 0 0 1 0
7 0 0 0 0 0 0 0
[[3]]
1 2 3 4 5 6 7
1 1 0 0 0 0 1 0
2 0 3 3 0 3 0 0
3 0 3 3 0 3 0 0
4 0 0 0 0 0 0 0
5 0 3 3 0 3 0 0
6 1 0 0 0 0 1 0
7 0 0 0 0 0 0 0
[[4]]
1 2 3 4 5 6 7
1 2 0 0 0 0 2 0
2 0 1 1 0 1 0 0
3 0 1 1 0 1 0 0
4 0 0 0 0 0 0 0
5 0 1 1 0 1 0 0
6 2 0 0 0 0 2 0
7 0 0 0 0 0 0 0
[[5]]
1 2 3 4 5 6 7
1 2 0 0 0 0 2 0
2 0 2 2 0 2 0 0
3 0 2 2 0 2 0 0
4 0 0 0 0 0 0 0
5 0 2 2 0 2 0 0
6 2 0 0 0 0 2 0
7 0 0 0 0 0 0 0
[[6]]
1 2 3 4 5 6 7
1 2 0 0 0 0 2 0
2 0 3 3 0 3 0 0
3 0 3 3 0 3 0 0
4 0 0 0 0 0 0 0
5 0 3 3 0 3 0 0
6 2 0 0 0 0 2 0
7 0 0 0 0 0 0 0
一般情況下,我可以有n個給定的「小矩陣表」,每個都有自己的數字矩陣。我如何在這種情況下使用apply類型的函數?
你有沒有考慮過你的問題含糊不清的可能性?我不明白你爲什麼認爲列表中的4個矩陣(或6個)是一個詳盡列舉M的「子矩陣」的例子。事實上,他們甚至不會出現「M」的真正子矩陣,因爲M全爲零。 –
我想我的術語是不正確的,謝謝你讓我知道!簡單地說:我有一個大矩陣M和更小的矩陣,我想從中產生所有可能的小矩陣組合成M的混合。我的問題是如何在不使用for循環的情況下執行此操作。 – SAT
您沒有提及這些膠合是否需要保留元素的鄰接關係,或者子矩陣是否需要是方形的。你提供的例子受到各種解釋的影響,但看起來子矩陣需要是正方形的,但是它們可以放回非鄰近位置的大矩陣中。所有猜測,因爲你沒有采用標準的數學術語。 –