500*_*500 5 wolfram-mathematica tuples set subset
退出以下问题:
我需要生成一个随机集(1 000 000项就够了)
Subsets[Flatten[ParallelTable[{i, j}, {i, 1, 96}, {j, 1, 4}], 1], {4}]
Run Code Online (Sandbox Code Playgroud)
此外,我需要拒绝任何具有非唯一第一元素的四元组,例如{{1,1},{1,2},{2,3},{6,1}}.
但是在笔记本电脑上面是不可能的.我怎么能统一绘制一百万套,避免杀死我的机器?
假设您有一个基础集,您需要生成 4 元素子集,
baseSet = Flatten[Table[{i, j}, {i, 1, 96}, {j, 1, 4}], 1];
Run Code Online (Sandbox Code Playgroud)
您可以使用RandomSample如下:
RandomSample[baseSet, 4]
Run Code Online (Sandbox Code Playgroud)
这给你一个长度为 4 的随机子集baseSet。在我的旧机器上生成一百万个需要 2.5 秒:
Timing[subsets = Table[RandomSample[baseSet, 4], {1000000}];]
Run Code Online (Sandbox Code Playgroud)
并非我们得到的所有内容都是不同的子集,因此我们需要使用以下方法删除重复项Union:
subsets = Union[subsets];
Run Code Online (Sandbox Code Playgroud)
此后,由于可能的子集数量大得多,我在样本运行中仍然剩下 999 971 个项目 ( Binomial[Length[baseSet], 4] == 891 881 376)