1

M给定一个大小为和的矩阵N,我们希望用整数值 (>=0) 填充每一行,使其总和为某个值。

请注意,M和的尺寸N是使用某些公式预先计算的,因此可以保证在给定所需条件(即sum_val以下)的情况下与填充相匹配。

这是两个例子

#sum_val <-2
#m<-6
#n<-3

# the value of "sum_val" may vary
# and 'm' 'n' also change depends on it

# First are initialized using 0
#mat <- matrix(0,nrow=m,ncol=n);


# Below results are hand coded:
       [,1] [,2] [,3]
[1,]    1    1    0   # Sum of each rows here is equal to 'sum_val = 2'
[2,]    1    0    1
[3,]    0    1    1
[4,]    2    0    0
[5,]    0    2    0
[6,]    0    0    2

另一个例子:

> sum_val<-2;
#m<-15
#n<-5
#mat <- matrix(0,nrow=m,ncol=n);

# Below results are hand coded:
       [,1] [,2] [,3] [,4] [,5]
 [1,]    1    1    0    0    0   # rows also sums up to 2 
 [2,]    1    0    1    0    0
 [3,]    1    0    0    1    0
 [4,]    1    0    0    0    1
 [5,]    0    1    0    0    1
 [6,]    0    0    1    0    1
 [7,]    0    0    0    1    1
 [8,]    0    1    0    1    0
 [9,]    0    1    1    0    0
[10,]    0    0    1    1    0
[11,]    2    0    0    0    0
[12,]    0    2    0    0    0
[13,]    0    0    2    0    0
[14,]    0    0    0    2    0
[15,]    0    0    0    0    2

我陷入了以下循环:

> for (ri in 1:m) {
+     for (ci in 1:n) {
+      
+        
+        # Not sure how to proceed from here
+        if(ci==2) {
+             mat[ri,ci] <- 1;
+        }
+     }
+ }

解决它的最佳方法是什么?

4

1 回答 1

6

以下是我将如何解决它!

library(partitions)

sum_val <- 2
n <- 5

t(as.matrix(compositions(sum_val, n)))
      [,1] [,2] [,3] [,4] [,5]
 [1,]    2    0    0    0    0
 [2,]    1    1    0    0    0
 [3,]    0    2    0    0    0
 [4,]    1    0    1    0    0
 [5,]    0    1    1    0    0
 [6,]    0    0    2    0    0
 [7,]    1    0    0    1    0
 [8,]    0    1    0    1    0
 [9,]    0    0    1    1    0
[10,]    0    0    0    2    0
[11,]    1    0    0    0    1
[12,]    0    1    0    0    1
[13,]    0    0    1    0    1
[14,]    0    0    0    1    1
[15,]    0    0    0    0    2
于 2012-05-11T03:10:40.023 回答