我有以下6乘2矩阵:
1 9
2 3
5 6
8 7
3 4
5 1
我想使用所有可能的组合在每列中添加任意三个数字。我知道每列中可能的组合总数是20,因为我将在任何时候从6个数字中选择3个数字(即6个组合3)。所以,我希望有一个20乘2的矩阵作为我的输出。
例如,在第1列中,如果我在前3行中添加数字,我将得到8.同样,如果我在第2列的前三行中添加数字,我将得到18.所以我的外出这种情况将是8 18.类似地,如果我选择第2行到第4行,我的输出将是15 16,第3行到第5行将给出16 17.所以将具有类似的内容:
8 18
15 16
16 17
.
.
etc
我的最终输出是20乘2矩阵。
拜托,有人可以提供帮助吗?
答案 0 :(得分:3)
您可以获取每个唯一组合的索引,然后将它们用作原始矩阵的线性索引,以获得您想要的内容,如下所示:
% your input matrix
A = [1, 9; 2, 3; 5, 6; 8, 7; 3, 4; 5, 1];
% find indices for unique combinations (i.e. order doesn't matter)
n = size(A,1); B = zeros(nchoosek(n,3), 3); counter = 0;
for i = 1 : n, for j = i+1 : n, for k = j+1 : n
counter = counter + 1;
B(counter,:) = [i,j,k];
end; end; end
% apply as linear indices to original matrix and collect
C = [sum(A(B), 2), sum(A(B + size(A,1)), 2)]
C =
8 18
11 19
6 16
⋮ ⋮
13 11
16 12