Matlab中矢量元素的所有缩放组合

时间:2016-09-08 22:06:21

标签: matlab combinations

我有这样的矢量:

 A=[3 4 5 6];

我想获得一个新的Matrix B,它由A元素的所有可能缩放组合组成,避免只有一个元素的行(然后每行至少有两个元素),例如:

B=[3 4 5 6;
   3 4 5 0;
   3 4 0 0;
   0 4 5 6;
   0 0 5 6;
   3 0 5 6;
   3 0 5 0;
   0 0 5 6;
   3 4 0 6;
   0 4 0 6;
   3 4 0 0;
   etc...  
];

你能帮我吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

这是一种方法:

A = [3 4 5 6]; % data
N = 2; % minimum number of elements that should be present
p = dec2bin(1:2^numel(A)-1)-'0'; % binary pattern. Each row is a combination
s = sum(p,2)>=N; % index to select rows of p that have at least N ones
result = bsxfun(@times, A, p(s,:)); % multiply with singleton expansion

在您的示例中,这给出了

result =
     0     0     5     6
     0     4     0     6
     0     4     5     0
     0     4     5     6
     3     0     0     6
     3     0     5     0
     3     0     5     6
     3     4     0     0
     3     4     0     6
     3     4     5     0
     3     4     5     6