使用约束扩展网格(或电源设置)

时间:2018-05-26 00:35:50

标签: r matrix data.table bigdata powerset

这个问题可能过于笼统,但我觉得它在我的工作中一再出现,因此可能引起其他人的兴趣。

假设我想创建一个基于扩展网格的数据表(或矩阵)。

 library(data.table)
 Vmat1 = data.table(expand.grid(c(list(d = 1:5, w = 1:(3)))))

但是假设如果我这样做,这将导致真实功率集的内存错误。但是,我想要施加约束,例如:

如果w> 1,则必须是d <3

然后,这会给出较小的最终集,会导致内存错误:

Vmat1[w>1 & d<3 | w==1]
   d w
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1
6: 1 2
7: 2 2
8: 1 3
9: 2 3

我的问题是,是否可以在创建网格时事先施加限制?构建全功率组件然后调节和降低成本太高。

1 个答案:

答案 0 :(得分:1)

如果您关注的是记忆,可以按照@chinsoon的建议分成几组。

# Filter Method
V = CJ(d = 1:5, w = 1:3) # same as data.table(expand.grid(c(list(d = 1:5, w = 1:(3))))) except ordering
a <- V[w>1 & d<3 | w==1]

# Sets Method
d <- 1:5
w <- 1:3
b <- rbindlist(list(
      CJ(d = d[d < 3], w = w[w > 1]) 
    , CJ(d = d, w = w[w == 1])))

all(a == b[order(d, w)])

# [1] TRUE