在MATLAB中获取所有可能的聚类

在MATLAB中获取所有可能的聚类,matlab,combinations,Matlab,Combinations,假设我有一个向量n=1:4 我想创建一个单元格数组,其中包含这些项目的所有可能分组,假设分组可以是任意大小,可以有任意数量的组,但每个值必须出现在每个配置中 下面是我想创建的示例,但没有每个可能性: possibilities = { {[1 2 3 4]},... {[1 2 3], 4},... {[1 2 4], 3},... ... {[1 3], [2 4]},... ... {[1 3], 2, 4},... {1,2,

假设我有一个向量
n=1:4

我想创建一个单元格数组,其中包含这些项目的所有可能分组,假设分组可以是任意大小,可以有任意数量的组,但每个值必须出现在每个配置中

下面是我想创建的示例,但没有每个可能性:

possibilities = {
    {[1 2 3 4]},...
    {[1 2 3], 4},...
    {[1 2 4], 3},...
    ...
    {[1 3], [2 4]},...
    ...
    {[1 3], 2, 4},...
    {1,2,3,4}
    }
因此,单元中的每个单元都包含1:4的值,但它们可以任意分组为任意大小的组。唯一的限制是每个唯一的集群应该只出现一次,其中
{[1 2 3],4}
{[2 1 3],4}
{4,[3 1 2]}
相同


我认为
nchoosek
函数可能有用,但老实说,我对如何以一种合理优雅的方式将其组合在一起感到困惑。

您可以使用
combnk

a = 1:4;
for k = 1:length(a) 
    C{k} = combnk(a,k); 
end
我认为这个数学概念叫做幂集。请注意,上面的示例忽略了empy集。

将我指向

为了将答案与问题一起发布,下面是它的工作原理

>> possibilities = partitions(4)

possibilities = 

    {1x1 cell}
    {1x2 cell}
    {1x2 cell}
    {1x2 cell}
    {1x3 cell}
    {1x2 cell}
    {1x2 cell}
    {1x3 cell}
    {1x2 cell}
    {1x2 cell}
    {1x3 cell}
    {1x3 cell}
    {1x3 cell}
    {1x3 cell}
    {1x4 cell}

>> partdisp(possibilities)

The 15 partitions of set {1 2 3 4}:
{1 2 3 4} 
{1 2 3} {4} 
{1 2 4} {3} 
{1 2} {3 4} 
{1 2} {3} {4} 
{1 3 4} {2} 
{1 3} {2 4} 
{1 3} {2} {4} 
{1 4} {2 3} 
{1} {2 3 4} 
{1} {2 3} {4} 
{1 4} {2} {3} 
{1} {2 4} {3} 
{1} {2} {3 4} 
{1} {2} {3} {4} 

如果您查看文件交换,我相信您可以找到一些可以进行设置分区的功能。此功能甚至在其文档中使用了您的测试用例作为示例:我考虑了一些类似的内容,但是
combnk
并没有填充集群以便使用所有项目。例如,
{[1 2 3]}
无效,因为它缺少
4
您是对的。您可能可以通过
setdiff
在C{k}中每个矩阵的每一行上使用
1:4
获得它。我的解决方案是无效的。