【发布时间】:2021-12-10 22:22:28
【问题描述】:
我正在尝试生成一个矩阵,它具有 [0 0 1 1] 的所有唯一组合,我为此编写了以下代码:
v1 = [0 0 1 1];
M1 = unique(perms([0 0 1 1]),'rows');
• 这并不理想,因为 perms() 将每个向量元素视为唯一并执行以下操作:
4! = 4 * 3 * 2 * 1 = 24 组合。
• 使用 unique() 我试图删除所有重复的条目,所以我最终得到了组合矩阵 M1 →
仅[4!/ 2! * (4-2)!] = 6 组合!
现在,当我尝试做一些非常简单的事情时:
n = 15;
i = 1;
v1 = [zeros(1,n-i) ones(1,i)];
M = unique(perms(vec_1),'rows');
• perms() 函数试图做的不是[15!/ 1! * (15-1)!] = 15 组合,而是
15! = 1.3077e+12 组合并被中断。
• 您将如何以更好的方式做事?提前致谢!
【问题讨论】:
-
是的,确实如此。首先 perms 在调用 unique 之前需要 yo 输出,因此您的代码无法解决内存问题。
-
感谢您的评论。你会建议做什么?有没有办法在不耗尽内存的情况下生成这些组合?
-
我假设自己编写代码。不确定是否有内置
-
我不知道该怎么做,我知道它周围的数学以及如何用二项式系数计算组合的度数,但函数 perms 的工作原理并不明显
标签: arrays matlab matrix permutation