我有一个关于Matlab中所有矩阵行组合的问题。我现在创建一个组合矩阵出一个两列矩阵的:matlab中两列矩阵的所有组合
输入:
1 2
1 3
1 4
2 3
2 4
3 4
我得到的是以下几点:
1 2 3 4
1 3 2 4
1 4 2 3
而当输入矩阵具有从1:6它看起来像这样:
1 2 3 4 5 6
1 2 3 5 4 6
1 2 3 6 4 5
1 3 2 4 5 6
1 3 2 5 4 6
....
现在我已经实施了以下解决方案,其中我窝rks近完美(感谢路易斯门多):
M = [1 2
1 3
1 4
2 3
2 4
3 4]; %// example data
n = floor(max(M(:))/2); %// size of tuples. Compute this way, or set manually
p = nchoosek(1:size(M,1), n).'; %'// generate all n-tuples of row indices
R = reshape(M(p,:).', n*size(M,2), []).'; %// generate result...
R = R(all(diff(sort(R.'))),:); %'//...removing combinations with repeated values
我现在的问题是大小。我需要这个矩阵来实现优化算法,但是nchoosek-command会创建一个休眠矩阵,它会在最后一个命令行中缩短。实际上,我只能将此解决方案用于长度为15位的输入向量,因为nchoosek命令无法处理更多。
我现在正在搜索的是一种不使用nchoosek命令创建这些组合的方法。有人有一个想法如何?
感谢和最好的方面
乔纳斯
看看这个:http://stackoverflow.com/questions/22301115/efficient-matlab-implementation-of-multinomial-系数 – tashuhka