假设我们对维度 3 x N 的矩阵(比如 MAT )有固定的行和,其中(即行和)是= (RS ,LS,NCS)' 。 N 列向量未知。每个 N 列向量有3种可能的选择 - (1,0,0)',(0,1,0)',(0,0,1) )'
所以第一个问题是 -
如何通过使用R软件将行总和固定为(RS,LS,NCS)' 来如何获得此矩阵 MAT 的所有可能选择?
例如 - 取 N = 7, RS =第一行的总和= 2, LS =第二行的总和= 2和 NCS =第三行的总和= 3。所以(1,0,0)'会出现两次,(0,1,0)'也将出现两次和(0,0,1)'将在该矩阵 MAT 的 N 列中出现三次。 MAT 的一种可能选择是 -
1 0 0 0 0 1 0
0 1 0 0 0 0 1
0 0 1 1 1 0 0
我认为通过将行和固定为(2,2,3)'将会有7个/!(2!x2!x3!)= 210个可能的 MAT 选项。
但是如何使用R软件获得 MAT 的可能选择?它应该是一个3xNxn维数组,其中 n 是 MAT 的可能选择数。
第二个问题是 -
如果矩阵 MAT 的每个 N 列向量的可能选择变为 - (1,1,0),解决方案机制如何在上述问题中发生变化',(1,0,0)',(0,1,0)',(0,0,1)' ?
答案 0 :(得分:1)
您可以使用iterpc
包。
library(iterpc)
foo = function(index){
sapply(index, function(z){as.numeric(c(z==1,z==2,z==3))})
}
获取所有可能的矩阵
I = iterpc(c(2,2,3), ordered=TRUE)
M = getall(I)
sapply(1:nrow(M), function(i) foo(M[i,]), simplify=FALSE)
逐一获取矩阵
I = iterpc(c(2,2,3), ordered=TRUE)
foo(getnext(I))
foo(getnext(I))
foo(getnext(I))