Matlab 为n个数字创建所有可能的组合矩阵
这是我发布的第一个问题。 我在Matlab中创建矩阵时遇到了一些问题。 我想创建一个矩阵,包含数字[1,2,3]的所有可能的唯一组合(因此没有任何重复组合) 这意味着它将创建一个如下所示的矩阵: 1 2 13 1 2 3 2 3Matlab 为n个数字创建所有可能的组合矩阵,matlab,matrix,Matlab,Matrix,这是我发布的第一个问题。 我在Matlab中创建矩阵时遇到了一些问题。 我想创建一个矩阵,包含数字[1,2,3]的所有可能的唯一组合(因此没有任何重复组合) 这意味着它将创建一个如下所示的矩阵: 1 2 13 1 2 3 2 3 提前谢谢 你不能有这样的矩阵。您只能拥有: 1 2 NaN 1 3 NaN 1 2 3 2 3 NaN 您可以使用单元格数组,如A=cell(4,1);A{1}=[1,2];A{2}=… 如果您希望获得生成所有这些可能性的代码(我认为您实际上想要的),那么请更改您的问
提前谢谢 你不能有这样的矩阵。您只能拥有:
1 2 NaN
1 3 NaN
1 2 3
2 3 NaN
您可以使用单元格数组,如A=cell(4,1);A{1}=[1,2];A{2}=…
如果您希望获得生成所有这些可能性的代码(我认为您实际上想要的),那么请更改您的问题并显示您已经尝试过的内容
现在让我们假设这是您真正想要的。你应该做递归。伪代码解决方案如下所示:
generatelist(numbers)
if numbers is empty, return [];
else return cell array length numbers+1, where first element is empty and the remaining ones have that numberX + output of generatelist(numbers > numberX).
为了去掉单个元素的答案,最后将它们解析出来,这将稍微简化递归部分。
要获得矩阵,请找到最长的单元格和组合数,用NaN创建矩阵并填充值。我还不能评论,因为信誉不够。。。 如前所述,不能有非矩形矩阵 例如,您可以使用单元格数组形式的解决方案,这段代码可以做到这一点(但可能不是最有效的): 然后你打电话:
find_subsets(1:3)
编辑:
这实际上是在反转元素,您可以通过后处理或使用以下方法来纠正这一点:
subsets_1 = find_subsets(tab(1:end-1));
Y = num2cell(ones(1, length(subsets_1)) * tab(end));
不能创建非矩形的矩阵。也许你想要一个单元格?所以应该排除1个元素的组合?这并没有回答问题,它只回答了我的评论。要么回答问题,要么作为评论。@AnderBiguri我在提交解决方案后看到了你的评论,事实上,NaN矩阵确实回答了“创建矩阵”部分。除非真正需要的是让代码创建所有的组合,而不是把它们放在矩阵中。谢谢你同意我的意见,因为你没有回答OP想要的。那个么这个答案是错误的。@AnderBiguri所以对于那个想要创建组合矩阵的问题,答案应该是生成组合的代码?这些是根本不同的问题。一种是这样回答的:创建单元数组或向数据追加NAN。另一个由执行递归的代码来回答。或者,在这个非常简单的例子中,甚至是一个代码,它将创建一个8x3数组,使用nan,nan,nan->1,2,3=0到7之间的所有二进制数,序列由二进制值定义。然后分析出了
subsets_1 = find_subsets(tab(1:end-1));
Y = num2cell(ones(1, length(subsets_1)) * tab(end));