r - 在 R 中不重复和零结构的“k”单元之间分配“n”
问题描述
我想知道 R 中是否有一种方法可以在不重复的单元n
之间进行分配(例如,与, 和and相同)并且不考虑组合(即 no )并查看此分布的构成?k
3 5 2
5 3 2
2 3 5
5 2 3
0
9 1 0
例如,如果n = 9
然后k = 3
我们期望化妆是:
(注意:k
将始终是列数)
3 3 3
4 3 2
4 1 4
5 2 2
5 1 3
6 2 1
7 1 1
makeup <- function(n, k){
# your suggested solution #
}
解决方案
partitions
这些被称为整数分区(更具体地说是受限制的整数分区),并且可以使用包或arrangements
类似的方式有效地生成:
partitions::restrictedparts(9, 3, include.zero = FALSE)
[1,] 7 6 5 4 5 4 3
[2,] 1 2 3 4 2 3 3
[3,] 1 1 1 1 2 2 3
arrangements::partitions(9, 3)
[,1] [,2] [,3]
[1,] 1 1 7
[2,] 1 2 6
[3,] 1 3 5
[4,] 1 4 4
[5,] 2 2 5
[6,] 2 3 4
[7,] 3 3 3
它们比由此提供的解决方案快得多:
library(microbenchmark)
microbenchmark(arrangePack = arrangements::partitions(20, 5),
partsPack = partitions::restrictedparts(20, 5, include.zero = FALSE),
myfun2(20, 5, 20),
myfun1(20, 5, 20),
makeup(20, 5),
mycomb(20, 5), times = 3, unit = "relative")
Unit: relative
expr min lq mean median uq max neval
arrangePack 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 3
partsPack 3.070203 2.755573 2.084231 2.553477 1.854912 1.458389 3
myfun2(20, 5, 20) 10005.679667 8528.784033 6636.284386 7580.133387 5852.625112 4872.050067 3
myfun1(20, 5, 20) 12770.400243 10574.957696 8005.844282 9164.764625 6897.696334 5610.854109 3
makeup(20, 5) 15422.745155 12560.083171 9248.916738 10721.316721 7812.997976 6162.166646 3
mycomb(20, 5) 1854.125325 1507.150003 1120.616461 1284.278219 950.015812 760.280469 3
事实上,对于下面的例子,其他函数会因为内存而报错:
system.time(arrangements::partitions(100, 10))
user system elapsed
0.068 0.031 0.099
arrangements::npartitions(100, 10)
[1] 2977866
推荐阅读
- python - 在不污染全局命名空间的情况下初始化/导入子模块
- python - 使用 Selenium 和 Python 在 Instagram 通知中单击“现在不”
- c# - 获取具有相同月份引用的两个日期之间的值总和
- android - Firebase 匿名身份验证(Android):终身?
- postgresql - postgres -c
= 不适用于 docker 中的 Postgres 11 - java - 如何以编程方式向 Google Pay 添加付款方式?
- ionic-framework - IONIC3 - 如何在 getResult 方法中将 rxjs debounceTime 和 distinctUntilChanged 添加到 ion-auto-complete
- javascript - 基于Color Picker修改Force Layout中的节点颜色
- php - 如何在用 php 编写的 onclick 中添加引号?
- typescript - Nest 无法解析同一个模块中的依赖关系?