我们如何使用nchoosek()来获取矩阵行的所有组合?

时间:2017-11-09 14:24:06

标签: matlab combinations

如果我们有一个1-5个数的向量v,我们可以使用nchoosek(v,2)来获得具有两个元素的所有组合。但是这个功能现在允许我们获得矩阵的所有组合。我想用它来获取矩阵行的所有组合。

3 个答案:

答案 0 :(得分:1)

这是一种方法:

function p = q47204269(inMat)
% Input handling:
if nargin == 0 || isempty(inMat)
  inMat = magic(5);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rowsCell = num2cell(inMat,2);
nRows = size(inMat,1);
p = cell(nRows,1);
for indR = 1:nRows
  r = nchoosek(1:nRows,indR);
  p{indR} = cell2mat(reshape(rowsCell(r.',:).',indR,1,[]));
end  

另见:

  • perms函数,因为它可能会在你正在做的事情中派上用场。
  • This question

答案 1 :(得分:0)

方阵A

v = 1:size(A,1);
a = nchoosek(v,2);
B = zeros(2,size(A,1),length(a));
for i = 1:length(a)
    B(:,:,i) = A(a(i,:)',:);
end

数组B的每一层都是一个2行矩阵,其行组合来自A

答案 2 :(得分:-1)

不是最可读的答案,只是为了单行: - )

A = randn(5,3); % example matrix
N = 2; % number of rows to pick each time
result = permute(reshape(A(nchoosek(1:size(A,1), N).', :), N, [], size(A,2)), [1 3 2]);

结果是一个3D数组,这样每个第三个暗淡的切片都会给出一个A的子矩阵。