所以这是我发布的第一个问题。 我在Matlab中创建矩阵时遇到了一些问题。 我想创建一个矩阵,其中包含所有可能的数字[1,2,3]的唯一组合(因此没有任何重复的组合)。
这意味着它将创建一个如下所示的矩阵:
1 2
1 3
1 2 3
2 3
提前致谢!
答案 0 :(得分:0)
我还没有发表评论,没有足够的声誉...... 如前所述,您不能使用非矩形矩阵。
例如,您可以以单元格数组的形式获得解决方案,此代码可以执行此操作(尽管可能不是最有效的):
function [ all_subsets ] = find_subsets( tab )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
if (isempty(tab))
all_subsets = {[]};
else
subsets_1 = find_subsets(tab(2:end));
Y = num2cell(ones(1, length(subsets_1)) * tab(1));
subsets_2 = arrayfun(@(L, X) add_elem(L, X), subsets_1, Y, 'UniformOutput', false);
all_subsets = [subsets_1 subsets_2];
end
end
function [L2] = add_elem(L, X)
L2 = L{1};
L2(end+1)=X{1};
end
然后你打电话:
find_subsets(1:3)
修改强>:
这实际上是在扭转元素,您可以通过后期处理或使用:
来纠正这些元素 subsets_1 = find_subsets(tab(1:end-1));
Y = num2cell(ones(1, length(subsets_1)) * tab(end));
答案 1 :(得分:-1)
你不能有这样的矩阵。你只能:
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).
要摆脱单个元素的答案,最后将它们解析出来,它会略微简化递归部分。 要获取矩阵,找到最长的单元格和组合编号,使用nans创建矩阵并填充值。