如何为排除的元素生成带有零的向量组合矩阵?

Posted

技术标签:

【中文标题】如何为排除的元素生成带有零的向量组合矩阵?【英文标题】:How to generate a matrix of vector combinations with zeros for excluded elements? 【发布时间】:2015-07-22 04:51:04 【问题描述】:

我想从一个向量的所有满足条件的元素组合中创建一个矩阵

例如,我有这个向量

a = [1 2 3 4 5]

并想创建一个像

这样的矩阵
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;
     ........;]

然后得到满足条件的行我可以使用命令:

b = sum(a')' > value

但我不知道如何生成矩阵

【问题讨论】:

这里有一些提示:***.com/questions/30153890/… 应该适用于任意条件还是仅适用于您列出的条件?你需要矩阵做什么?如果您提供更多上下文,可能会有更好的解决方案。 你能解释一下这个模式吗?例如,为什么行 1 2 3 4 0 会被跳过? 感谢您的回答,主要思想是我有一个具有许多最大发动机功率的向量,我想知道满足功率需求的所有发动机组合,如果我创建一个矩阵与发动机功率组合,然后将每个向量的总和与功率需求进行比较,然后仅获得满足条件的组合 对不起,Dan 模式 1 2 3 4 0 被我的错误跳过了,我解决了,谢谢 【参考方案1】:

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

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

输出:

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

【讨论】:

感谢您的回复,但这并不能解决我的问题,因为数字会移动到其他列,我想防止这种情况发生 @efirvida 如果你使用像sum 这样的聚合函数,为什么数字的顺序很重要? 因为在 git 之后,给我动力需求的引擎组合需要根据其他规则优化每个引擎的多少电力使用,如果订单改变我不知道引擎是。例如,我有 4 个引擎“[10 20 30 40]”和 25 mW 的需求与第二个引擎 (20 mW) 的任何组合都可以满足需求,但是如何使用它我不能使用第一个引擎的 5 mW (10 mW ) 和第二个引擎的 20 个,或者相同引擎的 10 个和 15 个,以及许多其他引擎,如果我保持顺序,我可以通过其在向量上的位置轻松识别引擎 @efirvida 我用一种保留顺序的新方法更新了我的答案。 不错的方法!你可以用result = bsxfun(@times, c, a);避免a_rep

以上是关于如何为排除的元素生成带有零的向量组合矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

matlab找出两个向量都不为零的元素,并找出元素的位置

生成一个矩阵,其中包含取自 n 个向量的元素的所有组合

如何从两个数组中所有元素的乘积创建矩阵?

如何为 3D 矢量中未使用的元素释放内存?

如何为R中向量的特定元素分配名称

Eigen库矩阵和向量的运算