关于Matlab:如何为排除的元素生成零矢量组合矩阵?

How to generate a matrix of vector combinations with zeros for excluded elements?

我想从一个满足条件

的向量的元素的所有组合中创建一个矩阵

例如,我有这个向量

1
a = [1 2 3 4 5]

,并希望创建一个类似于

的矩阵

1
2
3
4
5
6
7
8
a = [1 0 0 0 0;
     1 2 0 0 0;
     1 2 3 0 0;
     1 2 3 4 0;
     1 2 3 4 5;
     0 2 0 0 0;
     0 2 3 0 0;
     ........;]

,然后获取满足条件的行,我可以使用以下命令:

1
b = sum(a')' > value

但我不知道如何生成矩阵


您可以生成所有可能的二进制组合来确定所需的矩阵:

1
2
3
4
5
6
7
8
9
10
11
a = [1 2 3];
n = size(a,2);

% generate bit combinations
c =(dec2bin(0:(2^n)-1)=='1');
% remove first line
c = c(2:end,:)
n_c = size(c,1);

a_rep = repmat(a,n_c,1);
result = c .* a_rep

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
c =

 0     0     1
 0     1     0
 0     1     1
 1     0     0
 1     0     1
 1     1     0
 1     1     1


result =

 0     0     3
 0     2     0
 0     2     3
 1     0     0
 1     0     3
 1     2     0
 1     2     3