如果我们有一个1-5个数的向量v,我们可以使用nchoosek(v,2)来获得具有两个元素的所有组合。但是这个功能现在允许我们获得矩阵的所有组合。我想用它来获取矩阵行的所有组合。
答案 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
函数,因为它可能会在你正在做的事情中派上用场。答案 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
的子矩阵。